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 注释,然后编写一个注释处理器,强制任何具有该注释的类都是抽象的。

请参阅有关注释处理的这个问题:Java 中的注释处理是什么?

于 2012-04-18T07:27:59.340 回答
0

据我所知,没有自动解决方案。

但是,如果您事先知道传递给方法 foo 的类列表,则可以实现手动解决方案。IE

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 回答