我的问题如下;请协助。
我有一个适用于我想在运行时处理的方法的注释,比如说
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnno {
String name();}
这是我的处理器:
public class MyAnnoProcessor(Class cls){
Method[] m = cls.getClass().getMethods();
...// read the value passed to name and create an instance of an object depending on the value of 'name'
是。 MyAnnoProcessor代码如下:
public class MyAnnoProcessor(Class cls){
Method[] methods = cls.getMethods();
for(Method m: methods){
MyAnno an = (MyAnno) m.getAnnotation(MyAnno.class);
if(an!=null)
sysout(an.name());
....//call another method to create a class based on the value passed to 'name'
现在,我有一个类,我想编写许多用@MyAnno注释的方法,但每个方法都将不同的值传递给“name”。我只是无法找到一种理想的方式来处理注释处理? 'MyAnnoProcessor'应该如何知道需要将哪个(对象)返回到哪个方法?
说,我在方法A:
中这样做 @MyAnno(name="testA")
public void A(){
MyAnnoProcessor(this);
...}
我再次在方法B中这样做:
@MyAnno(name="testB")
public void B(){
MyAnnoProcessor(this);
...}
'MyAnnoProcessor'似乎在方法B的后续调用中将'name'的值读作“testA”而不是“testB”。我哪里错了?请指教。
答案 0 :(得分:0)
如果要查找单个方法的注释,可以先使用反射获取方法,然后执行getDeclaredAnnotations()
。像
Class clazz = ...//obtain class object
Method method = clazz.getMethod("A", null);
或者,使用您当前的代码,您仍然可以遍历所有方法,并通过在m.getName()
循环中执行for
来匹配方法名称,以找出您正在查看的方法马上。
P.S:我不完全确定你的代码会编译(MyAnnoProcessor,我没有看到任何方法),请尝试遵循方法的命名约定)