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 + 多态模型时用上,能省不少力气。

zip
moshi-sealed.zip 预估大小:29个文件
folder
moshi-sealed-master 文件夹
file
.gitignore 1KB
folder
gradle 文件夹
folder
wrapper 文件夹
file
gradle-wrapper.jar 54KB
file
gradle-wrapper.properties 202B
file
dependencies.gradle 2KB
file
gradle-mvn-push.gradle 7KB
file
README.md 2KB
file
build.gradle 2KB
file
CHANGELOG.md 25B
folder
.github 文件夹
folder
workflows 文件夹
file
ci.yml 1KB
folder
moshi-sealed-annotations 文件夹
file
build.gradle 782B
folder
src 文件夹
folder
main 文件夹
folder
kotlin 文件夹
folder
dev 文件夹
folder
zacsweers 文件夹
folder
moshisealed 文件夹
folder
annotations 文件夹
file
DefaultNull.kt 919B
file
DefaultObject.kt 904B
file
TypeLabel.kt 894B
file
gradle.properties 674B
folder
moshi-sealed-reflect 文件夹
file
build.gradle 1KB
folder
src 文件夹
folder
main 文件夹
folder
kotlin 文件夹
folder
dev 文件夹
folder
zacsweers 文件夹
folder
moshisealed 文件夹
folder
reflect 文件夹
file
MoshiSealedJsonAdapterFactory.kt 3KB
file
gradle.properties 666B
file
gradlew.bat 3KB
file
gradlew 6KB
file
RELEASING.md 910B
folder
moshi-sealed-codegen 文件夹
file
build.gradle 2KB
folder
src 文件夹
folder
main 文件夹
folder
kotlin 文件夹
folder
dev 文件夹
folder
zacsweers 文件夹
folder
moshisealed 文件夹
folder
codegen 文件夹
file
MoshiSealedProcessor.kt 10KB
file
gradle.properties 666B
file
gradle.properties 1KB
file
LICENSE.txt 11KB
folder
sample 文件夹
file
build.gradle 1KB
folder
src 文件夹
folder
test 文件夹
folder
kotlin 文件夹
folder
dev 文件夹
folder
zacsweers 文件夹
folder
moshisealed 文件夹
folder
sample 文件夹
folder
test 文件夹
file
MessageTest.kt 3KB
folder
main 文件夹
folder
kotlin 文件夹
folder
dev 文件夹
folder
zacsweers 文件夹
folder
moshisealed 文件夹
folder
sample 文件夹
file
Message.kt 566B
file
settings.gradle 1KB
...
zip 文件大小:89.12KB