リフレクションによってJavaクラスが抽象かどうかを判断する方法


184

Jarファイルのクラスを調べて、抽象的でないクラスを見つけたいと思っています。クラスをインスタンス化してInstantiationExceptionをトラップすることでこれを解決できますが、一部のクラスは起動が重いため、パフォーマンスに影響があります。Class.javaドキュメントでisAbstract()のようなものを明確に見つけることができません。

回答:


321

クラスオブジェクトで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()


1
ありがとう!ちょっとした注意:変数名として「クラス」を使用することはできません。例を変更したいかもしれません。
TimBüthe、2010年

@sethそれModifier.isAbstract( someClass.class.getModifiers() );を変更したいと思うかもしれません
steven7mwesigwa

通常のJavaの命名規則によると、それはどちらかsomeClass.getModifiers()またはSomeClass.class.getModifiers()どこにあるのかClass<SomeClass> someClass = SomeClass.class;
次の


1
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;
}

インターフェースであり、クラス名がjava.util.Listである場合、ArrayListを作成する可能性があります
Abdushkur Ablimit
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.