检查派生类是否具有超类的注释

时间:2012-12-13 11:14:07

标签: java oop inheritance annotations

如果派生类有特定的注释,我需要检查,形成超类:

public class SuperClass
{
  public boolean hasAnnotation()
  {
    //super_class_method_code
  }
}

@annotationToCheck
public class DerivedClass extends SuperClass
{
   //derived_class_code
}

有可能在Java?我知道如何在C#中做,但在Java中我找不到任何解决方案...... :(

谢谢!!!

2 个答案:

答案 0 :(得分:7)

如果您的实例实际上是子类类型,那么就像在超类中定义方法以实现以下实现一样简单:

this.getClass().isAnnotationPresent(annotationToCheck.class);

由于this是DerivedClass的一个实例,getClass返回DerivedClass并且检查有效。

注意2:正如@Pshemo在评论中提到的那样,这仅在注释使用@Retention(RetentionPolicy.RUNTIME)注释时才有效。

答案 1 :(得分:0)

使用reflections项目获取派生类的另一种方法。这个反射项目有依赖项(slf4j,log4j和javassist等)。


注意:派生类应仅在提及的包中。

import java.util.Set;

import org.reflections.Reflections;

public class Base {

    public Base() {
        Reflections reflections = new Reflections("com.sree.despacerivedclasskage");
        Set<Class<? extends Base>> classes = reflections
                .getSubTypesOf(Base.class);
        System.out.println(classes);
        for(Class clazz: classes){
            System.out.println(clazz.isAnnotationPresent(ToCheck.class));
        }

    }
public static void main(String[] args) {
    Base b = new Base();
}

}