问题
I want to use @OneOf
annotation from package io.dropwizard.validation;
Java usage:
@OneOf(value = {"m", "f"})
Kotlin usage: ???
I've tried this:
@OneOf(value = arrayOf("m", "f"))
and this:
@OneOf(value = ["m", "f"])
All i get is :
Type inference failed. Expected type mismatch:
required: String
found:
Array<String>
Kotlin version: 1.1.2-2
回答1:
The value
parameter is automatically converted to a vararg parameter in Kotlin, as described in http://kotlinlang.org/docs/reference/annotations.html#java-annotations.
The correct syntax for this particular case is @OneOf("m", "f")
回答2:
In Kotlin 1.2, it supports array literal in annotation. So the below syntax becomes valid in Kotlin 1.2:
@OneOf(value = ["m", "f"])
回答3:
As an example from Kotlin docs
@AnnWithArrayMethod(names = arrayOf("abc", "foo", "bar")) class C
回答4:
Example of annotation parameters other than value. Non-literals can also be passed inside []
@RequestMapping(value = "/{isbn}", method=[RequestMethod.GET])
fun getBook(@PathVariable isbn: String) : Book = bookRepository.findBookByIsbn(isbn)
来源:https://stackoverflow.com/questions/44069045/kotlin-how-to-pass-array-to-java-annotation