(Moshi in kotlin) @Json vs @field:Json
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.
To better see the difference you should inspect the decompiled Java code of the Kotlin Bytecode in IntelliJ/Android Studio.
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 Kotlin docs.