在Kotlin
中没有适用于init块的AnnotationTarget
是真的吗?
如果这是正确的,那么为什么会这样呢?在我看来,这看起来非常奇怪.
我试过不同的AnnotationTarget
,但都不管用.然后,我试着根本不使用@Target()
注释,它也不起作用.
在Kotlin
中没有适用于init块的AnnotationTarget
是真的吗?
如果这是正确的,那么为什么会这样呢?在我看来,这看起来非常奇怪.
我试过不同的AnnotationTarget
,但都不管用.然后,我试着根本不使用@Target()
注释,它也不起作用.
Kotlin被设计成能够与Java互操作.Kotlin代码必须能够编译成.class文件.类文件格式没有"init块",因此init块上的注释不能编码到类文件中.
这意味着,如果支持初始化块上的批注,则必须有AnnotationRetention.SOURCE
个.这类似于are支持的表达式上的批注.(AnnotationTarget.EXPRESSION
).
这意味着只有批注处理器才能使用这些批注.您不能通过反射或判断类文件来访问它们.
具体地说,批注处理器会对102块做什么?我想不出任何必须做的事情来初始化块,这不能做对其他代码块.您已经可以通过在run { ... }
上使用AnnotationTarget.EXPRESSION
来注释代码块,
class Foo {
val x: Int
init {
@MyAnnotation run {
// ...
}
// if you need to initialise a val
@MyAnnotation
x = run {
// ...
}
}
}
当然,如果您有很多val
要初始化,并且您想要对每个val
进行批注处理,那么您将需要多次编写@MyAnnotation
.在这种情况下,最好将其设计为对要处理的所有init块的整个类应用一个注释,并使用另一个注释来表示" Select 退出".
总的来说,我认为init块批注添加的东西很少.