Котлин: как передать массив в аннотацию 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)
Другие вопросы по тегам