(Moshi in kotlin) @Json vs @field:Json (Moshi in kotlin) @Json vs @field:Json json json

(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.