2017-07-06 154 views
3

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

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说:

无效类型注释会员

我该怎么办?

谢谢!

+1

你的第一篇文章顺便说一句很好的解释! – guenhter

回答

1

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

参见官方科特林文档允许的类型https://kotlinlang.org/docs/reference/annotations.html

允许的参数类型:

对应于Java基本类型(int,龙等)
  • 类型;
  • 串;
  • classes(Foo :: class);
  • enums;
  • 其他注释;
  • 上面列出的类型的数组。

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

+0

谢谢你的回应!我重新检查了我的注释并发现了错误。我忘记标记JoinColumn作为注释 –

3

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

class JoinColumn() 

那么,它固定^ _ ^:

annotation class JoinColumn()