0

何らかの形でコンパイル時に classType が抽象型を指していることを確認することは可能ですか? 実行時チェックを行うことができます:

void foo(Class<? extends SubType> classType) {
    Modifier.isAbstract(classType.getModifiers()); 
}

foo(AbstractType.class);    // this should pass
foo(NotAbstractType.class); // this should fail

コンパイル時に同じことができたら?

4

2 に答える 2

3

独自の @MustBeAbstract アノテーションを記述してから、そのアノテーションを持つすべてのクラスが抽象であることを強制するアノテーション プロセッサを作成できます。

注釈処理に関するこの質問を参照してください: What is annotation processing in Java?

于 2012-04-18T07:27:59.340 に答える
0

私の知る限り、自動解決策はありません。

ただし、メソッド foo に渡されるクラスのリストが事前にわかっている場合は、手動のソリューションを実装できます。すなわち

private ArrayList<Class> abstractTypes = new ArrayList<>();

void foo(Class<? extends SubType> classType) {
    boolean isAbstract = false;
    for(Class c: abstractTypes)
       if((classType.getName()).equals(c.getName()){
          isAbstract = true;
          break;
       }

    //Do something else...   
}
于 2012-04-18T07:25:08.843 に答える