当我在字段中使用@Json时,序列化不能正常发生,但是它在更改为@field:Json后开始工作.
I came through this change after reading some bug thread and I think this is specific to kotlin. I would like to know what difference does @field:Json bring and is it really specific to kotlin?
当我在字段中使用@Json时,序列化不能正常发生,但是它在更改为@field:Json后开始工作.
I came through this change after reading some bug thread and I think this is specific to kotlin. I would like to know what difference does @field:Json bring and is it really specific to kotlin?
Whatever you put between @
and :
in your annotation specifies the exact target
for your Annotation.
When using Kotlin with JVM there is a substantial number of things generated, therefore your Annotation could be put in many places. If you don't specify a target
you're letting the Kotlin compiler choose where the Annotation should be put. When you specify the target
-> you're in charge.
为了更好地了解差异,您应该在IntelliJ/Android Studio中判断Kotlin字节码的反编译Java代码.
Example kotlin code:
class Example {
@ExampleAnnotation
val a: String = TODO()
@get:ExampleAnnotation
val b: String = TODO()
@field:ExampleAnnotation
val c: String = TODO()
}
Decompiled Java code:
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));
}
}
For more info go to 100.