如何检索特定类中存在的带注释和未注释的方法

时间:2014-11-18 06:44:23

标签: java jsp annotations

使用java反射

class A {    
  @two    
  public method1()  {    
  }    

  @one    
  public method2()  {    
  }

  @two    
  public method3()  {    
  }

  public method4()  {    
  }      
 }

在上面给出的代码示例中,我想根据用户的选择检索带注释的方法,非注释方法和类中存在的所有类型的方法。 例如 - 在上面给出的示例中,我想要仅检索类A的带注释的方法,或仅检索类A的非带注释的方法或类A中存在的所有方法。本示例的代码应该是什么。

有人可以帮帮我......

1 个答案:

答案 0 :(得分:0)

 public static void main(String[] args) throws Exception {

        Class clazz = B.class;

        List<Method> allMethods = new ArrayList<Method>(Arrays.asList(clazz.getDeclaredMethods()));
        try {
            for (Method method : allMethods) {
                method.setAccessible(true);
                if (null != method.getAnnotations() && method.getAnnotations().length > 0) {
                    Annotation[] annotations = method.getAnnotations();
                    System.out.println(method.getName());
                    for (Annotation annotation : annotations) {
                        System.out.println(annotation);
                    }

                } else {
                    System.out.println(method.getName());
                }
            }
        } catch (Exception e) {
            System.out.println(e);
        }
    }

public class B {

    public void getValue() {

    }

    @Deprecated
    public void getValue1() {

    }
}

<强>输出

getValue
getValue1
@java.lang.Deprecated()

要记住的要点

1。)上述方法使用Java Reflection

2。)java.lang.reflect.Method有两种方法getAnnotations()getDeclaredAnnotations(),可根据需要使用。有关详细信息,请阅读Javadoc。

3.)它还有isAnnotationPresent()方法,用于检查moethod上的特定注释。

4.)以上内容可用于访问字段和方法属性。