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

前端 未结 1 2127
无人及你
无人及你 2021-02-08 03:31

Serialization does not happen properly when I use @Json in the fields but it started working after changing to @field:Json.

I came thro

1条回答
  •  温柔的废话
    2021-02-08 03:52

    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.

    0 讨论(0)
提交回复
热议问题