33

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

Java用法:

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

Kotlin 用法:???

我试过这个:

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

和这个:

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

(编辑:这个例子从 Kotlin 1.2 开始工作,它支持注释中的数组文字,感谢@BakaWaii)

我得到的是:

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

必需:字符串

成立:Array<String>

Kotlin 版本:1.1.2-2

4

4 回答 4

30

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

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

于 2017-05-19T11:43:42.360 回答
21

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

@OneOf(value = ["m", "f"])
于 2017-09-29T18:38:18.847 回答
5

作为Kotlin 文档的示例

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

// Older Kotlin versions:
@OneOf(names = arrayOf("abc", "foo", "bar")) 
class D
于 2017-10-18T12:23:37.127 回答
0

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

@RequestMapping(value = "/{isbn}", method=[RequestMethod.GET])
fun getBook(@PathVariable isbn: String) : Book = bookRepository.findBookByIsbn(isbn)
于 2019-08-20T17:24:55.487 回答