当前位置: 首页 > 知识库问答 >
问题:

批注未复制到getter和setter

梁丘赞
2023-03-14

所以,我有了这个注释类

@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"

共有1个答案

左恺
2023-03-14

可以指定批注的use-site目标。例如,如果您想同时注释setter和getter,可以这样做:

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

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

 类似资料:
  • 有没有更好的方法只让getters公开?

  • 我有一个简单的课程生成器,允许教师为各种类别进行选择,这些选择ID被收集并分组在一起,我希望在最后将它们全部作为课程计划返回。 然而,我有一个奇怪的问题,我无法解决。我的Vuex存储正确显示选择,但是我的getter复制了我的所有数组。 选择完成后,我的Vuex商店通过Vue.js开发工具插件显示了这样的内容: 状态和获取者: 我从文件: 现在,我的控制台输出是: 问题是,我的其他获得者都不是这样

  • Lombok@Data annotation将在带注释的类上无声地添加字段的setter和getter。 如何在龙目岛添加基于条件的setter? lombok中有没有这样的支持 我已经在龙目岛文件中搜索了,我没有看到关于我的问题的解释。

  • 我想完成但不明白它是如何工作的 使用这段代码,我想注释生成它们各自的setter和getter,这样我就可以使用像 编辑2013-10-25 我的目标是构建一个能够做到这一点的库,因为我太好奇了,想了解如何在内部工作,所以我将能够用这个特性来支持我的框架,因为jet只是一个小实用程序,但在未来我希望它能为我节省大量的工作,你可以在github WSD Android上看到

  • 我是一名学生,我对symfony和stackoverflow非常陌生,如果我犯了一些错误,请原谅。 以下是我尝试访问页面时出现的错误: [语义错误]方法AppBundle\Controller\FormController::newAction()中的注释“@Route”从未导入。您是否忘记为该注释添加“use”语句?在/home/buddy/bamber/realbaumber/src/AppB

  • 我想知道getter和setter的声明有什么区别,是否有首选方法(以及为什么)。第一个可以由Visual Studio自动生成。其他的怎么样?谢谢 一号 第二 第三