(Моши в котлине) @Json против @field: Json - PullRequest
1 голос
/ 10 июля 2019

Сериализация не происходит должным образом, когда я использую @ Json в полях, но она начала работать после изменения на @ field: Json .

Я прошел через этоизменить после прочтения какой-то ветки ошибок, и я думаю, что это специфично для kotlin.Я хотел бы знать, какую разницу приносит @field: Json, и действительно ли она специфична для kotlin?

1 Ответ

1 голос
/ 11 июля 2019

Что бы вы ни указали между @ и : в своей аннотации, указывается точный target для вашей аннотации.

При использовании Kotlin с JVM генерируется значительное количество вещей, поэтому ваша аннотацияможно поставить во многих местах.Если вы не указываете target, вы позволяете компилятору Kotlin выбирать, куда следует помещать аннотацию.Когда вы указываете target -> вы отвечаете.

Чтобы лучше увидеть разницу, вы должны проверить декомпилированный Java-код байт-кода Kotlin в IntelliJ / Android Studio.


Пример кода котлина:

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 .

...