मैं यह कैसे निर्धारित कर सकता हूं कि प्रतिबिंब द्वारा एक जावा वर्ग अमूर्त है


183

मैं एक जार फ़ाइल में कक्षाओं के माध्यम से हस्तक्षेप कर रहा हूं और उन लोगों को ढूंढना चाहता हूं जो सार नहीं हैं। मैं इसे क्लासेस को इंस्टेंट करके और इंस्टेंटिएशन एक्सेप्शन को फंसाकर हल कर सकता हूं लेकिन इसमें परफॉर्मेंस हिट है क्योंकि कुछ क्लासेज में हैवी स्टार्टअप होता है। मैं स्पष्ट रूप से कुछ भी नहीं पा रहा हूँ जैसे क्लास में .Aava ()। डॉक्स।

जवाबों:


320

जब आप क्लास ऑब्जेक्ट पर getModifiers () कहते हैं, तो यह उसके एक संशोधक के रूप में अमूर्त होगा।

इस लिंक से मदद मिलनी चाहिए।

 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
धन्यवाद! एक छोटा नोट: आप "वर्ग" को एक चर नाम के रूप में उपयोग नहीं कर सकते, शायद आप अपना उदाहरण बदलना चाहते हैं।
टिम बुथ

@ सेठ मुझे लगता है कि यह होना चाहिए Modifier.isAbstract( someClass.class.getModifiers() );कि आप इसे बदलना चाहते हैं
स्टीवन 7mwigigwa

सामान्य जावा नामकरण सम्मेलनों के अनुसार यह someClass.getModifiers()या तो SomeClass.class.getModifiers()जहां हैClass<SomeClass> someClass = SomeClass.class;
nexus


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 है। आप ArrayList के रूप में बना सकते हैं
अब्दुशाकुर अब्दिलित
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.