【发布时间】:2011-01-31 13:34:45
【问题描述】:
如何更改 Java 中的方法正在执行的操作?
我的意思是,我正在尝试使用注释来制作以下代码
@Anno1(Argument = "Option1")
public class TestClass
{
@Anno2
public void test()
{
}
}
进入
public class TestClass
{
private static StaticReference z;
public void test()
{
z.invokeToAll();
}
}
这是我正在尝试做的一个非常简化的示例。 Anno1 会有很多可能的组合,但到目前为止这不是我的问题。我的问题是如何将代码添加到方法test()
如果可能,我正在寻找更通用的解决方案。例如。一种在方法中添加各种代码的方法(不仅仅是.invokeToAll()的一种方法)
到目前为止,我正在使用import javax.annotation.processing.*;,并且我有以下代码,但我不知道如何从那里继续
private void processMethodAnnotations(RoundEnvironment env)
{
for (Element e : env.getElementsAnnotatedWith(Anno2.class))
{
//If it is a valid annotation over a method
if (e.getKind() == ElementKind.METHOD)
{
//What to do here :S
}else
{
processingEnv.getMessager().printMessage(Diagnostic.Kind.WARNING,"Not a method!", e);
}
}
}
我找到了一些关于 Java 反射的东西,但我没有找到任何资源来帮助我做我正在做的事情。
显然我在我的代码中extends AbstractProcessor
我找到了本教程 (http://www.zdnetasia.com/writing-and-processing-custom-annotations-part-3-39362483.htm) 但这涉及创建一个新类,而不仅仅是更改方法.并且javax.lang.model.elements 不提供任何编辑该元素的方式(在我的例子中代表一个方法)。
我希望我的问题是明确的并且符合规则。如果不是,请发表评论,我会澄清。谢谢。
【问题讨论】:
标签: java reflection annotations