我正在尝试使用注释对代码进行一些预处理。在加载时,我想制作一个类的“虚拟”副本及其功能。但是在编译/构建时,我必须使用注释进行一些“预编译”。我需要在java的AbstractProcessor的子类的process-function中的代码。它应该将带有特殊参数的注释“@Named”(取决于注释@SpecialClass中定义的名称和方法/字段名称)添加到每个没有@Invisible或@Named意味着每个字段/方法的方法/字段没有任何注释。 如果检测到@ SpecialClass-Annotation,则调用AbstractProcessor的进程函数。
我想编译一下:
@SpecialClass(name="Class1")
public class Test{
public int var1;
@Invisible
public int priv;
@Named(name="variable", namespace="Class1")
public int var2;
public void funcA(...){...}
@Invisible
public void funcB(...){...}
@Named(name="funcX", namespace="Class1")
public void funcC(...){...}
}
到此:
@SpecialClass(name="Class1")
public class Test{
@Named(name="var1", namespace="Class1")
public int var1;
@Invisible
public int priv;
@Named(name="variable", namespace="Class1")
public int var2;
@Named(name="funcA", namespace="Class1")
public void funcA(...){...}
@Invisible
public void funcB(...){...}
@Named(name="funcX", namespace="Class1")
public void funcC(...){...}
}
我目前的问题是我不知道如何将注释添加到类对象(到字段/方法) 另外,我不理解过程函数的2个参数的操作。
我已经找到了这个主题:Adding programmatic annotations to a Java class但是没有人真正给出一个具体的例子。这就是为什么我再次在这里问,希望有人可以描述它的工作方式。
提前谢谢。
增加信息:
其实我不想确切地问这个,因为我不想让人们想我只想要你的解决方案但是当我问一个例子时我希望有人可以为我解决它。 稍后当代码加载到VM中时,我正在检查每个类的注释@Named。如果我找到了一个,我将在表示命名空间的对象中注册函数或字段。这意味着如果我想通过这个昵称调用一个函数,我只需选择“对象”并寻找方法的缺口。我需要在编译时而不是运行时使用注释来完成方法和字段,因为它可能是真正的方法名称被混淆了。因此,运行时的方法和字段可能具有无意义的名称。这就是为什么我想在它被混淆之前完成代码的原因 - >在编译时。