注解没有被复制到getter和setter



我有这个注释类

@Target(AnnotationTarget.PROPERTY_GETTER, AnnotationTarget.PROPERTY_SETTER, AnnotationTarget.PROPERTY)
@Retention(AnnotationRetention.RUNTIME)
annotation class MyTestAnnotation(val text: String)

我像这样使用

interface MyTestInterface {
@MyTestAnnotation("temp")
var tempString: String
}

这就是我如何使用反射实例化我的接口。

fun <T> with(myInterface: Class<T>): T {
return Proxy.newProxyInstance(
myInterface.classLoader,
arrayOf<Class<*>>(myInterface),
invocationHandler
) as T
}
private val invocationHandler = InvocationHandler { _, method, args ->
Log.e("Called method:", method.name) // setTempString
Log.e("declaredAnnotations", method.declaredAnnotations.size.toString()) // 0
Log.e("annotations", method.annotations.size.toString()) // 0
Log.e("args", args.size.toString()) // 1
}

我这样称呼它

val myInterface = with(MyTestInterface::class.java)
myInterface.tempString = "123"

我无法访问注释类的成员text,因为在我的invocationHandler中,我没有获得注释(正如您可以看到的,两个数组的长度都为零)。

我的问题是:是否有办法将注释复制到getter和setter中这样我就可以访问我放入注释中的数据了?

可以指定注释的使用站点目标。例如,如果你想同时注释setter和getter,你可以这样做:

@set:YourAnnotation
@get:YourAnnotation
val aProperty: AType

官方文档:https://kotlinlang.org/docs/annotations.html#annotation-use-site-targets

相关内容

  • 没有找到相关文章

最新更新