Что бы вы ни указали между @
и :
в своей аннотации, указывается точный 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 .