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)
我想使用来自 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)