如何在Kotlin注释中声明数组值?

我在Kotlin创建自己的注释时遇到了一些问题。 我必须创建一些注释,并在其中一些我需要声明与数组类型的值。 在Java中,我们可以这样做:

public @interface JoinTable { ... JoinColumn[] inverseJoinColumns() default {}; ... } 

JoinColumn也是一个注释类型。

我想在科特林做这样的事情:

 annotation class JoinTable( val name: String, val joinColumns: Array<JoinColumn> ) 

我也试图做到这一点:

 annotation class JoinTable( val name: String, val joinColumns: List<JoinColumn> ) 

但是我的IDe说:

注释成员的类型无效

我该怎么办?

谢谢!

和java一样,注释的值必须在编译时可用。 这意味着如果JoinColumn是一个普通的类或数据类, val joinColumns: List<JoinColumn>是不可能的。 如果它是一个枚举类( enum class JoinColumn ),可以使用它。

有关允许的类型,另请参阅官方kotlin文档https://kotlinlang.org/docs/reference/annotations.html

允许的参数类型是:

  • 对应于Java基本类型(Int,Long等)的类型;
  • 串;
  • 类(Foo :: class);
  • 枚举;
  • 其他注释;
  • 上面列出的类型的数组。

注释参数不能具有可为空的类型,因为JVM不支持将null存储为注释属性的值。

所以,这是我的大错。 我没有注意到在我的实现JoinColumn不是一个注释。

 class JoinColumn() 

那么修正^ _ ^:

 annotation class JoinColumn()