无论在注释中的@
和:
之间放置什么,都指定注释的确切目标
。
在JVM中使用Kotlin时,会生成大量内容,因此可以将注释放在许多地方。如果您没有指定目标
,您将让Kotlin编译器选择注释的放置位置。当您指定目标
->时,您就负责了。
为了更好地看到区别,您应该检查IntelliJ/Android Studio中Kotlin字节码的反编译Java代码。
kotlin代码示例:
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));
}
}