web-dev-qa-db-fra.com

Kotlin: comment passer un tableau à Java annotation

Je veux utiliser @OneOf annotation de package io.dropwizard.validation;

Utilisation de Java:

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

Utilisation de Kotlin: ???

J'ai essayé ça:

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

et ça:

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

(EDIT: cet exemple fonctionne depuis Kotlin 1.2, il prend en charge le tableau littéral dans l'annotation, merci @BakaWaii)

Tout ce que je reçois est:

L'inférence de type a échoué. Non-correspondance de type attendue:

requis: String

a trouvé: Array<String>

Version Kotlin: 1.1.2-2

21
charlie_pl

Le paramètre value est automatiquement converti en paramètre vararg dans Kotlin, comme décrit dans http://kotlinlang.org/docs/reference/annotations.html#Java-annotations .

La syntaxe correcte pour ce cas particulier est @OneOf("m", "f")

19
yole

Dans Kotlin 1.2, il prend en charge les littéraux de tableau dans les annotations. La syntaxe ci-dessous devient donc valide dans Kotlin 1.2:

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

Comme exemple de Kotlin docs

@AnnWithArrayMethod(names = arrayOf("abc", "foo", "bar")) class C
2
Bao Le

Exemple de paramètres d'annotation autres que la valeur. Les non-littéraux peuvent également être passés à l'intérieur []

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