我从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
谢谢你
1条答案
按热度按时间uyhoqukh1#
传递的值不包含对注解的引用,因为注解不是在值上,而是在其他东西上,在一些“静态”定义上,如类,属性,文件等。
在你的例子中,annotation在属性上。当你调用
user.name
时,你得到的是属性当前指向的值,而不是属性本身。如果你想从属性中提取annotation,你需要一个对它的引用,你可以通过使用::
来获得。要在User
类中获得name
属性上的annotation,你可以调用: