2016-06-23 14 views
5

मुझे समझ नहीं आता क्यों मैं निम्नलिखित कोड के साथ एक चेतावनी हो रही है है: कच्चे प्रकार java.lang.Classमुझे अनचेक चेतावनी क्यों मिल रही है?

के सदस्य के रूप isAssignableFrom(Class<?>) को

public static boolean isAssignableFrom(Class clazz, Object o) { 
    return clazz.isAssignableFrom(o.getClass()); 
} 

अनियंत्रित कॉल जब मैं isInstance का उपयोग विधि इसके बजाय (जो मैं समझता हूं उससे समान परिणाम प्रदान करता है), मुझे चेतावनी नहीं मिलती है:

public static boolean isAssignableFrom(Class clazz, Object o) { 
    return clazz.isInstance(o); 
} 

उत्तर

2

क्योंकि Class एक सामान्य प्रकार है, और आप जावा नहीं बता रहे हैं कि Object कक्षा का एक उदाहरण होना चाहिए। जैसे

public static <C> boolean isAssignableFrom(Class<C> clazz, C o) 
+0

धन्यवाद बदलें

public static boolean isAssignableFrom(Class clazz, Object o) 
कुछ करने के लिए

! जवाब ने इसे स्पष्ट किया। लेकिन मुझे लगता है कि रनटाइम पर किसी वस्तु के साथ जांच करने में सक्षम होने के लिए वहां एक प्रकार पैरामीटर का उपयोग करने के बजाय 'ऑब्जेक्ट ओ' को स्थानांतरित करना बेहतर होगा, है ना? – Revolutionair

+0

वास्तव में, टाइप एरर के बाद कोड रनटाइम पर समान होता है (ठीक है, मेरे उदाहरण में एक निहित कलाकार है)। –

+0

मान लें कि मेरे पास 3 कक्षाएं हैं: 'अभिभावक', 'बच्चा अभिभावक', 'रैंडम क्लास' बढ़ाता है। प्रकार पैरामीटर के साथ मैं जांच सकता हूं कि क्या बच्चा अभिभावक से असाइन किया जा सकता है लेकिन मैं इसे RandomClass ('isAssignableFrom (parent.class, new RandomClass()) के लिए करने में सक्षम नहीं होगा;' – Revolutionair

संबंधित मुद्दे