Kotlin:如何将数组传递给Java注释

cha*_*_pl 19 kotlin kotlin-interop

我想使用@OneOf注释package io.dropwizard.validation;

Java用法:

@OneOf(value = {"m", "f"})
Run Code Online (Sandbox Code Playgroud)

Kotlin用法:???

我试过这个:

 @OneOf(value = arrayOf("m", "f"))
Run Code Online (Sandbox Code Playgroud)

还有这个:

 @OneOf(value = ["m", "f"])
Run Code Online (Sandbox Code Playgroud)

我得到的是:

类型推断失败.预期的类型不匹配:

必需:字符串

发现: Array<String>

Kotlin版本:1.1.2-2

yol*_*ole 21

value参数在Kotlin中自动转换为vararg参数,如http://kotlinlang.org/docs/reference/annotations.html#java-annotations中所述.

这种特殊情况的正确语法是 @OneOf("m", "f")


Bak*_*aii 12

在Kotlin 1.2中,它支持注释中的数组文字.所以下面的语法在Kotlin 1.2中变得有效:

@OneOf(value = ["m", "f"])
Run Code Online (Sandbox Code Playgroud)


Bao*_* Le 7

作为Kotlin 文档中的示例

// Kotlin 1.2+:
@OneOf(names = ["abc", "foo", "bar"]) 
class C

// Older Kotlin versions:
@OneOf(names = arrayOf("abc", "foo", "bar")) 
class D
Run Code Online (Sandbox Code Playgroud)