Kotlin отражение: findAnnotation <Type>() возвращает ноль - PullRequest
0 голосов
/ 16 января 2019

У меня есть следующий класс данных:

data class Foo(@field:Password val password: String)

Почему Foo::password.annotations возвращает пустой список? Также Foo::password.findAnnotation<Password>() возвращает ноль.

То же самое происходит, когда я использую экземпляр Foo:

Foo("")::password.annotations

Foo("")::password.findAnnotation<Password>()

Однако этот Java-вариант работает: Foo::password.javaField.getAnnotation(Password::class.java).

Это на kotlin версии 1.3.10.

Документы не дают много информации о внутренней работе findAnnotation.

https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.reflect/-k-property/index.html

fun <T : Annotation> KAnnotatedElement.findAnnotation(): T?

Возвращает аннотацию данного типа для этого элемента.

Что мне здесь не хватает?

Заранее спасибо!

1 Ответ

0 голосов
/ 16 января 2019

Foo::password.annotations - список аннотаций на объекте. В своем коде вы использовали цель сайта @field: use, что означает, что аннотация применяется к вспомогательному полю, а не к свойству. Поэтому список аннотаций к свойству пуст.

Вариант Java работает, потому что он загружает список аннотаций на поле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...