2

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

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

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

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

谢谢!!!

4

2 回答 2

10

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

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

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

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

于 2012-12-13T11:23:10.283 回答
0

使用反射项目获取派生类的另一种方法。此反射项目具有依赖项(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();
}

}
于 2012-12-13T11:47:33.210 回答