Java抽象类型类编译时间检查

时间:2012-04-18 07:13:50

标签: java class time compilation abstract

是否有可能以某种方式在COMPILE时检查classType指向抽象类型? 运行时检查可以完成:

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

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

如果在COMPILE时间可以做同样的事情吗?

2 个答案:

答案 0 :(得分:3)

您可以编写自己的@MustBeAbstract注释,然后编写一个注释处理器,强制执行具有该注释的任何类都是抽象的。

关于注释处理请参阅此问题:What is annotation processing in Java?

答案 1 :(得分: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...   
}
相关问题