我在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说:
注释成员的类型无效
我该怎么办?
谢谢!
答案 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存储为注释属性的值。