Kotlin 中的嵌套注解
Nested annotations in Kotlin
在 Java 中可以创建像这样的嵌套注释:
public @interface InnerInnotation {
String value();
}
public @interface OuterAnnotation {
InnerAnnotation[] value() default {
@InnerAnnotation("Hello"),
@InnerAnnotation("World")
}
}
annotation class InnerAnnotation(val value: String)
但是当我尝试在 Kotlin 中做同样的事情时,出现编译错误:
annotation class OuterAnnotation(
// Next line doesn't compile: "Annotation class cannot be instantiated"
val value: Array<InnerAnnotation> = arrayOf(InnerAnnotation("Test"))
)
然而,单个实例注释字段工作正常:
annotation class OuterAnnotation(
val value: InnerAnnotation = InnerAnnotation("Hello World")
)
有没有办法用嵌套注释数组字段定义注释并为此字段指定默认值?
这是 Kotlin 编译器中的一个错误,应该被允许。感谢您的报告!我创建了一个问题:https://youtrack.jetbrains.com/issue/KT-10136
我不知道有什么解决方法,除了在 Java 中重写 OuterAnnotation
。
如果您不在嵌套注释上使用 @
,则此方法有效。据我阅读并与开发人员讨论过的内容,这是嵌套注释的预期语法。感觉不一致,我希望他们能改变它,但距离 1.0 如此之近,希望很小。
在 Java 中可以创建像这样的嵌套注释:
public @interface InnerInnotation {
String value();
}
public @interface OuterAnnotation {
InnerAnnotation[] value() default {
@InnerAnnotation("Hello"),
@InnerAnnotation("World")
}
}
annotation class InnerAnnotation(val value: String)
但是当我尝试在 Kotlin 中做同样的事情时,出现编译错误:
annotation class OuterAnnotation(
// Next line doesn't compile: "Annotation class cannot be instantiated"
val value: Array<InnerAnnotation> = arrayOf(InnerAnnotation("Test"))
)
然而,单个实例注释字段工作正常:
annotation class OuterAnnotation(
val value: InnerAnnotation = InnerAnnotation("Hello World")
)
有没有办法用嵌套注释数组字段定义注释并为此字段指定默认值?
这是 Kotlin 编译器中的一个错误,应该被允许。感谢您的报告!我创建了一个问题:https://youtrack.jetbrains.com/issue/KT-10136
我不知道有什么解决方法,除了在 Java 中重写 OuterAnnotation
。
如果您不在嵌套注释上使用 @
,则此方法有效。据我阅读并与开发人员讨论过的内容,这是嵌套注释的预期语法。感觉不一致,我希望他们能改变它,但距离 1.0 如此之近,希望很小。