3

这是我的场景“我有一个抽象类。有许多派生类使用注释扩展这个抽象类。此外,我有一个抽象类的方法,它反映了一个特定派生类中的所有符号”。

// Here's a definition of annotation
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface SampleAnnotation {
   int sample();
}

public abstract class A { 

 // Here's a method to reflect all annotations
 // in particular derived class like B or C
 @Override
 public void foo() {

 }}

public class B extends A {
  @SampleAnnotation (sample = 1)
  public void step1() {}

  @SampleAnnotation (sample = 2)
  public void step2() {}

}

public class C extends A {
  @SampleAnnotation (sample = 1)
  public void step1() {}

  @Sample (stage = 2)
  public void step2() {}
}

如何使用 java 反射来反映特定派生类(如 B 或 C )中的所有注释?

4

2 回答 2

3

也许您想到的是这个Reflections库。

使用反射,您可以查询元数据,例如:

  • 获取某种类型的所有子类型
  • 获取所有带有一些注释的类型/方法/字段,没有注释参数匹配
  • 获取匹配正则表达式的所有资源
于 2012-08-07T10:12:44.870 回答
1

这取决于:

  1. 是否要获取具体类的所有方法注解
  2. 是否要获取所有具体类的所有方法注解

第一个可以通过这样的方法实现来实现foo

public void foo() {
     for (Method method : this.getClass().getDeclaredMethods()) {
          for (Annotation a : method.getAnnotations()) {
              // do something with a
          }
     }
}

然后你可以从你的具体类中调用foo,例如:

new B().foo();

For the second case you will need to do class path scanning as Peter Lawrey has pointed out.

于 2012-08-07T10:13:29.777 回答