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

问题描述 投票:0回答:1

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

谢谢

kotlin annotations kotlin-reflect
1个回答
0
投票

传递的值不包含对注释的引用,因为注释不在值上,而是在其他东西上,在一些“静态”定义上,如类、属性、文件等。

在您的情况下,注释位于属性上。当您调用

user.name
时,您将获得属性当前指向的值,而不是属性本身。如果你想从属性中提取注释,你需要引用它,你可以使用
::
获得它。要获取
name
类中
User
属性的注解,可以调用:

User::name.annotations
© www.soinside.com 2019 - 2024. All rights reserved.