2009-07-02 2 views
152

Jarファイルのクラスを介在して抽象クラス以外のクラスを探したいと思います。私はクラスをインスタンス化し、InstantiationExceptionをトラップすることでこれを解決できますが、クラスによっては重い起動があるため、パフォーマンスが低下します。私はClass.javaのドキュメントでisAbstract()のようなものは明らかに見つかりません。Javaクラスがリフレクトで抽象クラスであるかどうかを調べるにはどうすればいいですか

答えて

261

クラスオブジェクトでgetModifiers()を呼び出すと、修飾子の1つとしてabstractが使用されます。

このlinkが役立ちます。また

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

+1

ありがとう!ちょっとした注意:変数名として "class"を使うことはできません。あなたの例を変更したいかもしれません。 –

28
Class myClass = myJar.load("classname"); 
bool test = Modifier.isAbstract(myClass.getModifiers()); 
+0

また、セスは言った。 :) – Stobor

0
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; 
} 
+0

インターフェイスであり、クラス名がjava.util.Listの場合ArrayList –

関連する問題