如果派生类有特定的注释,我需要检查,形成超类:
public class SuperClass
{
public boolean hasAnnotation()
{
//super_class_method_code
}
}
@annotationToCheck
public class DerivedClass extends SuperClass
{
//derived_class_code
}
有可能在Java?我知道如何在C#中做,但在Java中我找不到任何解决方案...... :(
谢谢!!!
答案 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();
}
}