web-dev-qa-db-ja.com

Kotlin:配列をJavaアノテーションに渡す方法

@OneOfpackage io.dropwizard.validation;アノテーションを使用したい

Javaの使用法:

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

Kotlinの使用法:???

私はこれを試しました:

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

この:

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

(編集:この例はKotlin 1.2以降で機能し、アノテーションで配列リテラルをサポートしています。@ BakaWaiiに感謝します)

私が得るすべては:

型推論に失敗しました。予想されるタイプの不一致:

必須:文字列

見つかった:Array<String>

Kotlinバージョン:1.1.2-2

21
charlie_pl

http://kotlinlang.org/docs/reference/annotations.html#Java-annotations で説明されているように、valueパラメータはKotlinのvarargパラメータに自動的に変換されます。

この特定のケースの正しい構文は@OneOf("m", "f")です

19
yole

Kotlin 1.2では、アノテーションで配列リテラルをサポートしています。したがって、以下の構文はKotlin 1.2で有効になります。

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

Kotlin docs の例

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

値以外の注釈パラメーターの例。非リテラルも[]内で渡すことができます

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