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

如何在java/Kotlin中使用注释处理将方法附加到现有类中?

沈开畅
2023-03-14
class SourceClass {
    @CustomAnnotation
    fun annotatedFun1(vararg argument: Any) {
        //Do something
    }

    @CustomAnnotation
    fun annotatedFun2(vararg argument: Any) {
        //Do something
    }

    fun someOtherFun() {
        //Do something
    }
}
class ResultClass {
    fun hasFunWithName(name: String): Boolean {
        return (name in arrayOf("annotatedFun1", "annotatedFun2"))
    }

    fun callFunByName(name: String, vararg arguments: Any) {
        when (name) {
            "annotatedFun1" -> annotatedFun1(*arguments)
            "annotatedFun2" -> annotatedFun2(*arguments)
        }
    }

    fun annotatedFun1(vararg argument: Any) {
        //Do something
    }

    fun annotatedFun2(vararg argument: Any) {
        //Do something
    }

    fun someOtherFun() {
        //Do something
    }
}

我已经了解了如何创建注释处理器。我正在寻找一种方法来保存源类中所有现有的字段、属性和方法,并向它追加更多的方法。

如果可以在不创建新类的情况下修改类--这将是完美的,但是在所有教程中只创建新类,并且我没有发现任何示例将源类的所有内容复制到另一个。

请不要建议使用反射。我需要这为android,所以反射不是可选的原因,资源成本。我正在寻找编译时解决方案。

它是应用程序中实现的自定义脚本语言所必需的,应该用于简化包装类结构。当这个工作直接在代码中完成时--当每个类的方法计数超过20个时,看起来很糟糕。

共有1个答案

华乐逸
2023-03-14

下面是我最近使用的Java注释处理的一个很好的示例。它是@immutable注释的实现。

查看ByteBuddy或Kotlin Point了解附加代码生成的工作原理

对于Kotlin,您几乎可以执行相同的操作,请查看本手册中特定于Kotlin的步骤。

 类似资料:
  • 我的处理器中有一个简单的注释,如下所示: 这适用于java文件,但一旦我将文件转换为kotlin,注释的导入就不再有效。为什么? 我需要改变什么才能让他的注释也在Kotlin中工作?从文档中,我可以看到kotlin与java注释100%兼容,所以我有点困惑这里有什么问题...如果处理器不工作,需要调整以与kotlin一起工作,我会理解,但我不知道为什么导入本身不工作... 我说的图书馆在这里:ht

  • 问题内容: 我正在为构建系统编写一些工具,以对属于包含某些注释的类的方法强制执行一些严格的调用约定。 我正在使用编译器树API … 我想知道的是,当遍历“树”时,如何知道MethodInvocation的类/接口的类型。 我使用以下方法将TreePathScanner子类化: 我希望有一种方法可以告诉您要在其上调用方法的类(或接口)的类型。我会以错误的方式处理吗?感谢您的任何想法… 问题答案: 这

  • 我有一个批处理文件,它运行几个python脚本来修改表。 > 我还想添加注释,特别提醒他们在运行批处理文件之前需要在批处理文件中更新的变量。我知道我可以使用。但这看起来更像是为了在用户运行之后更新进度。 是否有更恰当地添加注释的语法?

  • 最近,我将我的KMP项目分为fullstack项目和核心库(主要由公共数据类组成),并发现我需要在公共模块中定义的一个数据类上使用JVM库中的注释。 在Kotlin公共代码中似乎不可能使用Java库中的注释。 解决此类问题的可能方法是什么,最好避免通过声明此类数据类,然后在平台中重复其实现,但使用不同的注释?

  • 在Java中,以下代码是实现的一种方法。 kotlin的惯用做法?

  • 我有一个批处理文件,它运行了几个执行表修改的python脚本。 是否有更恰当地添加注释的语法?