Котлин: как передать массив в аннотацию Java
Я хочу использовать @OneOf
аннотация от package io.dropwizard.validation;
Использование Java:
@OneOf(value = {"m", "f"})
Использование Kotlin:???
Я пробовал это:
@OneOf(value = arrayOf("m", "f"))
и это:
@OneOf(value = ["m", "f"])
Все, что я получаю, это:
Вывод типа не удался. Ожидаемое несоответствие типов:
требуется: строка
найденный:
Array<String>
Котлин версия: 1.1.2-2
3 ответа
Решение
value
параметр автоматически преобразуется в параметр vararg в Kotlin, как описано в http://kotlinlang.org/docs/reference/annotations.html.
Правильный синтаксис для этого конкретного случая @OneOf("m", "f")
В Kotlin 1.2 он поддерживает литерал массива в аннотации. Таким образом, приведенный ниже синтаксис становится действительным в Kotlin 1.2:
@OneOf(value = ["m", "f"])
Как пример из Kotlin Docs
@AnnWithArrayMethod(names = arrayOf("abc", "foo", "bar")) class C
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)