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

38

我想使用来自io.dropwizard.validation包的@OneOf注释。

Java用法:

@OneOf(value = {"m", "f"})

Kotlin的用法: ???

我尝试过这个:

 @OneOf(value = arrayOf("m", "f"))

和这个:

 @OneOf(value = ["m", "f"])

(编辑:自Kotlin 1.2版本起,该示例可正常工作,它支持注释中的数组文字,感谢@ BakaWaii)

我得到的只有:

类型推断失败。 期望类型不匹配:

所需类型:String

找到的类型:Array<String>

Kotlin版本:1.1.2-2


要将数组作为可变参数传递,可以使用扩展(*)运算符。@OneOf(value = *arrayOf("m", "f")) - Miha_x64
4个回答

34

23
在 Kotlin 1.2 中,它支持在注解中使用数组字面量。因此,以下语法在 Kotlin 1.2 中变为有效:
@OneOf(value = ["m", "f"])

7
作为来自 Kotlin 文档的例子:Java 注解
// Kotlin 1.2+:
@OneOf(names = ["abc", "foo", "bar"]) 
class C

// Older Kotlin versions:
@OneOf(names = arrayOf("abc", "foo", "bar")) 
class D

1
有没有想过将其作为变量传递的方法? 例如,val someArray = arrayOf("abc", "foo", "bar") 我尝试了下面的方式,但它给了我“应该是编译时常量异常”的错误。 1) @OneOf(names = someArray) 2) @OneOf(names = *someArray) - Ahsan Naseem

0

除了值之外的注释参数示例。非文字也可以在[]中传递

@RequestMapping(value = "/{isbn}", method=[RequestMethod.GET])
fun getBook(@PathVariable isbn: String) : Book = bookRepository.findBookByIsbn(isbn)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接