在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之外,我不知道任何解决方法。

07-27 21:38