moshi-sealed Kotlin密封类序列化适配器
Kotlin 密封类的序列化老是让人头疼?用过 Moshi 的你应该知道,它原生可不怎么待见密封类。而 moshi-sealed 就是来帮你省事儿的。它有两个路子:反射,适合图快,写少点代码就能跑;还有代码生成,适合追求性能的同学,编译时就搞定一切,运行更轻快。
moshi-sealed的核心逻辑藏在一个 Gradle 项目里,结构清晰,包含了适配器实现、代码示例、构建脚本,还有一堆单测。你可以按着例子一步步改,马上能跑起来。配置完后,密封类写起来比用枚举还爽,尤其适合那些状态码类型的接口模型。
像下面这种:
sealed class Result {
  data class Success(val data: String) : Result()
  data class Error(val message: String) : Result()
}
直接用 Moshi 序列化,基本得靠你手写类型字段和判断逻辑,费事又不优雅。但加上 moshi-sealed,只需要简单配置,自动帮你搞定序列化字段注入和类型解析,挺省心的。
两个建议:
1. 项目小或原型阶段可以用反射方式,方便快捷;
2. 上生产建议用代码生成,尤其多层嵌套类、接口复杂时,性能提升蛮。
如果你在用 Moshi,又刚好碰上密封类的多态序列化,不妨把这个库拉下来试试。资源在moshi-sealed-master文件夹里,结构简单,容易上手。配套示例也挺清楚,看一眼就明白怎么用。
另外,如果你还不太熟 Kotlin 的密封类或者对反射、代码生成感兴趣,可以看看这些相关文章:
,moshi-sealed是一个比较实用的工具类库,适合你在 Kotlin + Moshi + 多态模型时用上,能省不少力气。
                            
                            moshi-sealed.zip
                            预估大小:29个文件
                        
                        
                        
                                
                                moshi-sealed-master
                                文件夹
                            
                                                        
                                
                                .gitignore
                                1KB
                            
                                                        
                                
                                gradle
                                文件夹
                            
                                                        
                                
                                wrapper
                                文件夹
                            
                                                        
                                
                                gradle-wrapper.jar
                                54KB
                            
                                                        
                                
                                gradle-wrapper.properties
                                202B
                            
                                                        
                                
                                dependencies.gradle
                                2KB
                            
                                                        
                                
                                gradle-mvn-push.gradle
                                7KB
                            
                                                        
                                
                                README.md
                                2KB
                            
                                                        
                                
                                build.gradle
                                2KB
                            
                                                        
                                                        
                                                        
                                                        
                                                        
                                                        
                                                        
                                                        
                                                        
                                                        
                                                        
                                                        
                                                        
                                                        
                                                        
                                                        
                                                        
                                                        
                                                        
                                                        
                                                        
                                                        
                                                        
                                                        
                                                        
                                                        
                                                        
                                                        
                                                        
                                                        
                                                        
                                                        
                                                        
                                                        
                                                        
                                                        
                                                        
                                                        
                                                        
                                                        
                                                        
                                                        
                                                        
                                                        
                                                        
                                                        
                                                        
                                                        
                                                        
                                                        
                                                        
                                                        
                                                        
                                                        
                                                        
                                                        
                                                        
                                                        
                                                        
                                                        
                                                        
                                                        
                                                        
                            
                            
                                                        
                                ...                            
                                                    
                                        
                                    文件大小:89.12KB
                                
                                
                                
                            
评论区