我具有以下数据类:
data class Foo(@field:Password val password: String)
为什么Foo::password.annotations
返回一个空列表?
另外,Foo::password.findAnnotation<Password>()
返回null。
当我使用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?
在此元素上返回给定类型的注释。
我在这里想念什么?
谢谢!
答案 0 :(得分:2)
Foo::password.annotations
是该属性上的注释列表。在您的代码中,您使用了@field:
使用网站目标,这意味着注释将应用于背景字段,而不是属性。因此,该属性上的注释列表为空。
Java变体之所以起作用,是因为它在字段上加载了注释列表。