Ответ 1
Параметр value
автоматически преобразуется в параметр vararg в Kotlin, как описано в http://kotlinlang.org/docs/reference/annotations.html#java-annotations.
Правильный синтаксис для этого конкретного случая - @OneOf("m", "f")
Я хочу использовать аннотацию @OneOf
от package io.dropwizard.validation;
Использование Java:
@OneOf(value = {"m", "f"})
Использование Котлина:
Я пробовал это:
@OneOf(value = arrayOf("m", "f"))
и это:
@OneOf(value = ["m", "f"])
Все, что я получаю, это:
Ошибка ввода типа. Ожидаемый тип несоответствия:
требуется: Строка
найдено:
Array<String>
Версия Котлина: 1.1.2-2
Параметр value
автоматически преобразуется в параметр vararg в Kotlin, как описано в http://kotlinlang.org/docs/reference/annotations.html#java-annotations.
Правильный синтаксис для этого конкретного случая - @OneOf("m", "f")
В Kotlin 1.2 он поддерживает литерал массива в аннотации. Таким образом, синтаксис ниже становится действительным в Kotlin 1.2:
@OneOf(value = ["m", "f"])
В качестве примера из Kotlin docs
@AnnWithArrayMethod(names = arrayOf("abc", "foo", "bar")) class C
Пример параметров аннотации, отличных от значения. Не-литералы также могут быть переданы внутрь []
@RequestMapping(value = "/{isbn}", method=[RequestMethod.GET])
fun getBook(@PathVariable isbn: String) : Book = bookRepository.findBookByIsbn(isbn)