peter.murray.rust
peter.murray.rust

Reputation: 38063

How can I determine whether a Java class is abstract by reflection

I am interating through classes in a Jar file and wish to find those which are not abstract. I can solve this by instantiating the classes and trapping InstantiationException but that has a performance hit as some classes have heavy startup. I can't find anything obviously like isAbstract() in the Class.java docs.

Upvotes: 200

Views: 61802

Answers (3)

abdushkur
abdushkur

Reputation: 41

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

Upvotes: 2

Stobor
Stobor

Reputation: 45132

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

Upvotes: 35

seth
seth

Reputation: 37277

It'll have abstract as one of its modifiers when you call getModifiers() on the class object.

This link should help.

 Modifier.isAbstract( someClass.getModifiers() );

Also:

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

Upvotes: 350

Related Questions