Jarファイルのクラスを調べて、抽象的でないクラスを見つけたいと思っています。クラスをインスタンス化してInstantiationExceptionをトラップすることでこれを解決できますが、一部のクラスは起動が重いため、パフォーマンスに影響があります。Class.javaドキュメントでisAbstract()のようなものを明確に見つけることができません。
Jarファイルのクラスを調べて、抽象的でないクラスを見つけたいと思っています。クラスをインスタンス化してInstantiationExceptionをトラップすることでこれを解決できますが、一部のクラスは起動が重いため、パフォーマンスに影響があります。Class.javaドキュメントでisAbstract()のようなものを明確に見つけることができません。
回答:
クラスオブジェクトでgetModifiers()を呼び出すと、修飾子の1つとして抽象が含まれます。
このリンクが役立ちます。
Modifier.isAbstract( someClass.getModifiers() );
また:
http://java.sun.com/javase/6/docs/api/java/lang/reflect/Modifier.html
http://java.sun.com/javase/6/docs/api/java/lang/Class.html#getModifiers()
Modifier.isAbstract( someClass.class.getModifiers() );
を変更したいと思うかもしれません
someClass.getModifiers()
またはSomeClass.class.getModifiers()
どこにあるのかClass<SomeClass> someClass = SomeClass.class;
Class myClass = myJar.load("classname");
bool test = Modifier.isAbstract(myClass.getModifiers());
public static boolean isInstantiable(Class<?> clz) {
if(clz.isPrimitive() || Modifier.isAbstract( clz.getModifiers()) ||clz.isInterface() || clz.isArray() || String.class.getName().equals(clz.getName()) || Integer.class.getName().equals(clz.getName())){
return false;
}
return true;
}