gpt4 book ai didi

json - Moshi 的 Kotlin 代码生成器有什么用?

转载 作者:行者123 更新时间:2023-12-04 06:16:44 32 4
gpt4 key购买 nike

我最近开始在我的 Android 应用程序中使用 Moshi,我很想知道更多关于注释的内容 @JsonClass(generateAdapter = true)真的。

示例数据类:

data class Person(
val name: String
)

我可以按如下方式序列化/反序列化这个类:
val moshi: Moshi = Moshi.Builder().build()
moshi.adapter(Person::class.java).toJson(Person())

我是 不是 在这里使用 @JsonClass 注释,因此不会启动代码生成。

我的问题是,为什么以及何时需要使用 @JsonClass(generateAdapter = true)

最佳答案

这是三个问题

  • 为什么代码生成有用

  • 代码生成作为反射 moshi-kotlin 的编译时替代品非常有用。它们都很有用,因为它们天生就理解 Kotlin 代码及其语言特性。没有它们,Moshi 将无法理解 Kotlin 可空性、默认值等等。在某些情况下,Moshi 仅与标准 Java 反射同时工作,上面的示例就是其中之一。但这非常容易出错,在 Moshi 1.9 中,这些将被拒绝并需要生成的适配器或 kotlin-reflect。
  • 它是如何工作的

  • Code gen 是一个注解处理器,用于查找用 @JsonClass(generateAdapter = true) 注释的类。 .它为每个带注释的类生成一个优化的流适配器。这些适配器本身就是 Kotlin,因此能够利用支持目标类的 Kotlin 语言功能。在运行时,Moshi 通过一个非常简单的已知名称后缀反射性地查找生成的适配器,这允许这些适配器无需手动注册适配器即可正常工作。

    您可以在我发布的博客文章中找到有关 1 和 2 的更多信息: https://www.zacsweers.dev/exploring-moshis-kotlin-code-gen/
  • 什么时候用

  • 在没有自定义适配器的情况下尝试使用 Moshi 序列化 Kotlin 类时,您应该使用 moshi-kotlin 或代码生成。反射将没有构建时间开销,但在运行时要慢得多,同时由于 kotlin-reflect 还会产生很大的二进制大小成本,并且无法安全地进行混淆。代码生成会产生构建时间成本,但在运行时速度极快,二进制大小成本最低,并且大部分是混淆安全的。由您决定哪一个更适合您的用例!您还可以使用组合,例如调试版本中的反射和仅用于发布版本的代码生成。

    关于json - Moshi 的 Kotlin 代码生成器有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58501918/

    32 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com