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

Kotlin: how to pass array to Java annotation

我想使用来自 package io.dropwizard.validation;

@OneOf 注释

Java 用法:

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

Kotlin 用法:???

我试过这个:

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

还有这个:

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

(编辑:此示例自 Kotlin 1.2 起有效,它支持注释中的数组文字,感谢@BakaWaii)

我得到的是:

Type inference failed. Expected type mismatch:

required: String

found: Array<String>

Kotlin 版本:1.1.2-2

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

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

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

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

例如 Kotlin docs

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

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

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

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