(Kotlin 中的 Moshi)@Json 与 @field:Json
Posted
技术标签:
【中文标题】(Kotlin 中的 Moshi)@Json 与 @field:Json【英文标题】:(Moshi in kotlin) @Json vs @field:Json 【发布时间】:2019-11-20 10:22:33 【问题描述】:当我在字段中使用 @Json 时,序列化没有正确发生,但在更改为 @field:Json 后它开始工作。
我在阅读了一些错误线程后完成了这个更改,我认为这是特定于 kotlin 的。我想知道@field:Json 带来了什么不同,它真的是 kotlin 特有的吗?
【问题讨论】:
【参考方案1】:无论您在注解中放在 @
和 :
之间的任何内容,都会为您的注解指定准确的 target
。
在将 Kotlin 与 JVM 结合使用时,会生成大量内容,因此您的 Annotation 可以放在很多地方。如果您没有指定 target
,那么您将让 Kotlin 编译器选择应该放置 Annotation 的位置。当你指定target
-> 你负责。
为了更好地查看差异,您应该在 IntelliJ/android Studio 中检查 Kotlin 字节码的反编译 Java 代码。
示例 kotlin 代码:
class Example
@ExampleAnnotation
val a: String = TODO()
@get:ExampleAnnotation
val b: String = TODO()
@field:ExampleAnnotation
val c: String = TODO()
反编译的 Java 代码:
public final class Example
@NotNull
private final String a;
@NotNull
private final String b;
@ExampleAnnotation
@NotNull
private final String c;
/** @deprecated */
// $FF: synthetic method
@ExampleAnnotation
public static void a$annotations()
@NotNull
public final String getA()
return this.a;
@ExampleAnnotation
@NotNull
public final String getB()
return this.b;
@NotNull
public final String getC()
return this.c;
public Example()
boolean var1 = false;
throw (Throwable)(new NotImplementedError((String)null, 1, (DefaultConstructorMarker)null));
欲了解更多信息,请访问Kotlin docs。
【讨论】:
更多关于它如何影响 Moshi 的信息会更好,因为问题是 Moshi 特定的,而不是注释本身之间的区别。但它有帮助,谢谢:)以上是关于(Kotlin 中的 Moshi)@Json 与 @field:Json的主要内容,如果未能解决你的问题,请参考以下文章
如何使用带有 Kotlin 的 Room 和 moshi 持久化带有 JSON 数组的 JSON 对象
如何在 moshi (kotlin) 中解析 LinkedHashMap
Kotlin中Json的序列化与反序列化 -- GsonMoshi
Kotlin中Json的序列化与反序列化 -- GsonMoshi