Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 检查派生类是否具有来自超类的注释_Java_Oop_Inheritance_Annotations - Fatal编程技术网

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

Java 检查派生类是否具有来自超类的注释,java,oop,inheritance,annotations,Java,Oop,Inheritance,Annotations,我需要检查,form super类,如果派生类有特定的注释: public class SuperClass { public boolean hasAnnotation() { //super_class_method_code } } @annotationToCheck public class DerivedClass extends SuperClass { //derived_class_code } 这在Java中是可能的吗?我知道如何使用C语言,但在

我需要检查,form super类,如果派生类有特定的注释:

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

@annotationToCheck
public class DerivedClass extends SuperClass
{
   //derived_class_code
}
这在Java中是可能的吗?我知道如何使用C语言,但在Java中我找不到任何解决方案…:(


谢谢!!!

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

this.getClass().isAnnotationPresent(annotationToCheck.class);
由于
this
是DerivedClass的一个实例,因此getClass返回DerivedClass并进行检查


注2:正如@Pshemo在注释中提到的,只有当注释使用
@Retention(RetentionPolicy.RUNTIME)

进行注释时,这才有效。如果您的实例实际上是子类类型,那么这就像在超类型中定义方法一样简单,以实现以下功能:

this.getClass().isAnnotationPresent(annotationToCheck.class);
由于
this
是DerivedClass的一个实例,因此getClass返回DerivedClass并进行检查


注2:正如@Pshemo在注释中提到的,这仅在注释使用
@Retention(RetentionPolicy.RUNTIME)
另一种使用project获取派生类的方法进行注释时有效。此项目具有依赖项(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();
}

}
import java.util.Set;
导入org.reflections.reflections;
公共阶级基础{
公共基地(){
反射=新反射(“com.sree.despacerivedclasskage”);

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

}
import java.util.Set;
导入org.reflections.reflections;
公共阶级基础{
公共基地(){
反射=新反射(“com.sree.despacerivedclasskage”);

设置这是C中的解决方案:[may this help][1][1]:另一个在运行时这是C中的解决方案:[may this help][1][1]:另一个在运行时+1我只想补充一点,这适用于带有
@Retention(RetentionPolicy.runtime)
policy.Ohhhhh!!!!我忘了指定@Retention(value=RetentionPolicy.runtime)和@Target(value=ElementType.TYPE)在我的注释中!!!谢谢你的Hiery和Pshemo!!!@Pshemo很好的观察!谢谢你添加了这一点。请随时用此信息更新你的答案,或者更新我的评论,使其更可见(对于那些-像我一样开始时-不知道为什么它不适用于他们的人:)@HieryNomus我删除了()从OP问题中的类声明来看,注释1现在毫无意义(对不起;p)+1我只想补充一点,这适用于带有
@Retention(RetentionPolicy.RUNTIME)
policy.ohhhh!!!!我忘了指定@Retention(value=RetentionPolicy.RUNTIME)和@Target(value=ElementType.TYPE)的注释在我的注释中!!!谢谢你Hiery和Pshemo!!!@Pshemo很好的观察!谢谢你添加这一点。请随时用此信息更新你的答案,或者更新我的评论,使其更可见(对于那些一开始就喜欢我的人,他们想知道为什么它对他们不起作用:)@HieryNomus我删除了()从OP问题中的类声明中,所以注释1现在是毫无意义的(抱歉;p)