Kotlin反射:findAnnotation <type>()返回null

时间:2019-01-16 10:58:44

标签: reflection kotlin

我具有以下数据类:

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?

     

在此元素上返回给定类型的注释。

我在这里想念什么?

谢谢!

1 个答案:

答案 0 :(得分:2)

Foo::password.annotations是该属性上的注释列表。在您的代码中,您使用了@field:使用网站目标,这意味着注释将应用于背景字段,而不是属性。因此,该属性上的注释列表为空。

Java变体之所以起作用,是因为它在字段上加载了注释列表。