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);

thisDerivedClassのインスタンスであるため、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 に答える