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 如此之近,希望很小。