有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java运行时注释处理

我的问题如下:;请帮忙

我有一个只适用于我希望在运行时处理的方法的注释,比如

                    @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);
                  ...}

在方法B对“name”的后续调用中,“MyAnnoProcessor”似乎将“name”的值读取为“testA”,而不是“testB”。我错在哪里了?请告知


共 (1) 个答案

  1. # 1 楼答案

    如果要查找单个方法的注释,可以首先使用反射和do a^{}获取该方法。差不多

    Class clazz = ...//obtain class object Method method = clazz.getMethod("A", null);

    或者,使用当前代码,您仍然可以循环所有方法并通过在for循环中执行m.getName()来匹配方法名称,以找出您现在正在查看的方法

    注:我不完全确定你的代码是否可以编译(MyAnnoProcessor,我没有看到任何方法),请尝试遵循方法的命名约定)