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

时间:2017-07-06 13:29:52

标签: java arrays annotations arguments kotlin

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

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

其中JoinColumn也是注释类型。

我想在Kotlin做类似的事情:

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

我也试过这样做:

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

但我的IDe说:

  

注释成员的类型无效

我该怎么办?

谢谢!

2 个答案:

答案 0 :(得分:3)

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

class JoinColumn()

嗯,它修复了^ _ ^:

annotation class JoinColumn()

答案 1 :(得分:1)

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

另请参阅允许类型https://kotlinlang.org/docs/reference/annotations.html

的官方kotlin文档
  

允许的参数类型为:

     
      
  • 与Java原始类型(Int,Long等)对应的类型;
  •   
  • 字符串;
  •   
  • classes(Foo :: class);
  •   
  • 枚举;
  •   
  • 其他注释;
  •   
  • 上面列出的类型的数组。
  •   
     

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