如何使用Kotlin获取外部方法中变量的注解?

6tqwzwtp  于 2023-03-30  发布在  Kotlin
关注(0)|答案(1)|浏览(196)

我从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

谢谢你

uyhoqukh

uyhoqukh1#

传递的值不包含对注解的引用,因为注解不是在值上,而是在其他东西上,在一些“静态”定义上,如类,属性,文件等。
在你的例子中,annotation在属性上。当你调用user.name时,你得到的是属性当前指向的值,而不是属性本身。如果你想从属性中提取annotation,你需要一个对它的引用,你可以通过使用::来获得。要在User类中获得name属性上的annotation,你可以调用:

User::name.annotations

相关问题