【发布时间】:2018-10-20 18:49:24
【问题描述】:
我是注释处理和代码生成的新手。我想了解如何执行此类操作,例如将新方法附加到现有类。这是我想做的一个例子:
假设我们有一个带有像这样的自定义注释的类:
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 时,它看起来很糟糕。
【问题讨论】:
-
您找到解决方案了吗?就我而言,我需要在注释处理阶段向现有方法/归档添加注释。
-
@SashaShpota 不,我目前没有解决方案。写一个,如果你发现了什么。
标签: java kotlin annotations kapt codegen