我从 Kotlin 反射开始。我需要在 Kotlin 中编写一个方法,该方法将接受一个变量(在本例中是 String 类型)并返回应用于该变量的所有注释(如果有的话)。
fun getAnnotations(variable: String): List<Annotation>{
//get annotations here
}
当然,这只有在将注释与变量本身一起传递给方法时才有可能。我无法在文档中找到该信息。对于我的用例,将整个用户对象发送到 getAnnotations 方法是不可接受的。所以我不能使用
User::class.getDeclaredField
。我需要一种可以从变量中提取注释的方法。
期待学习。 谢谢
例子:
类和注解:
@Target(AnnotationTarget.PROPERTY)
annotation class MyAnnotation()
data class User(
@MyAnnotation
val name: String,
val address: String
...
)
用法:
//user data is fetched and stored in 'user' object
println(getAnnotations(user.name)) //should return @MyAnnotation
println(getAnnotations(user.address)) //should return empty list
谢谢
传递的值不包含对注释的引用,因为注释不在值上,而是在其他东西上,在一些“静态”定义上,如类、属性、文件等。
在您的情况下,注释位于属性上。当您调用
user.name
时,您将获得属性当前指向的值,而不是属性本身。如果你想从属性中提取注释,你需要引用它,你可以使用 ::
获得它。要获取name
类中User
属性的注解,可以调用:
User::name.annotations