这是我的场景“我有一个抽象类。有许多派生类使用注释扩展这个抽象类。此外,我有一个抽象类的方法,它反映了一个特定派生类中的所有符号”。
// 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?
答案 0 :(得分:3)
或许你想到的是这个Reflections库。
使用思考可以查询元数据,例如:
- 获取某种类型的所有子类型
- 获取所有带注释的类型/方法/字段,没有匹配的注释参数
- 获取与正则表达式匹配的所有资源
答案 1 :(得分:1)
取决于:
第一个可以使用foo
的方法实现来实现:
public void foo() {
for (Method method : this.getClass().getDeclaredMethods()) {
for (Annotation a : method.getAnnotations()) {
// do something with a
}
}
}
然后,您可以从具体类中调用foo
,例如:
new B().foo();
对于第二种情况,您需要按 Peter Lawrey 指出的那样进行类路径扫描。