सभी Class
ऑब्जेक्ट्स कक्षा/संदर्भ प्रकारों का प्रतिनिधित्व नहीं करते हैं; Class
ऑब्जेक्ट्स भी हैं जो प्राचीन प्रकार का प्रतिनिधित्व करते हैं। यह उपयोगी है क्योंकि फ़ील्ड और विधियों के साथ प्रतिबिंब का उपयोग करने में, आपको अक्सर अपने प्रकार को निर्दिष्ट करने की आवश्यकता होती है, और यह एक आदिम प्रकार हो सकता है। तो Class
का उपयोग ऐसे सभी पूर्व-जेनेरिक प्रकारों का प्रतिनिधित्व करने के लिए किया जाता है।
हालांकि, Class
कक्षा के कई तरीकों से प्राचीन प्रकार के लिए कोई अर्थ नहीं है। उदाहरण के लिए, किसी ऑब्जेक्ट के लिए instanceof int
होना असंभव है। इसलिए, समान .isInstance()
विधि हमेशा false
वापस आ जाएगी। चूंकि उस विधि का पैरामीटर Object
टाइप है, इसलिए मूलभूत प्रकार के होने के लिए आप जो भी पास करते हैं, उसके लिए भाषा बिंदु से यह असंभव है।
ज़रूर, जावा में 5 + जब आप प्रकार Object
की एक पैरामीटर के लिए एक आदिम गुजरती हैं, यह autoboxing से होकर गुजरती है, लेकिन तथ्य यह है कि यह autoboxing लिया मतलब है कि क्या पारित किया गया था वास्तव में एक वस्तु के लिए एक संदर्भ है। संदर्भ प्रकार और आदिम प्रकार अलग हैं। एक पैरामीटर या तो एक संदर्भ प्रकार या आदिम प्रकार है। इस प्रकार आप एक ऐसी विधि नहीं लिख सकते जो "संदर्भ या आदिम" ले सके।
आप जो पूछ रहे हैं, आपके उदाहरण में, यह पता लगाने के लिए है कि ऑब्जेक्ट एक आदिम से ऑटोबॉक्साइड था, और इसे एक प्राचीन प्रकार से तुलना करें। हालांकि, यह पता लगाना असंभव है कि कॉलर ने इसे ऑटोबॉक्साइड किया है, क्योंकि ऑटोबॉक्सिंग एक पूरी तरह से कॉलर-साइड ऑपरेशन है जो कॉल से पहले होता है।
हालांकि, यह मानते हुए कि यह ऑटोबॉक्साइड था, आप जानते हैं कि इसे किस प्रकार जाना चाहिए था। यदि आप int
की अपेक्षा कर रहे हैं, और यह ऑटोबॉक्स्ड है और आपकी विधि से गुजरता है, तो यह Integer
का उदाहरण होना चाहिए।इस प्रकार, आप क्या कर सकते हैं, जब clazz
एक प्राचीन प्रकार का प्रतिनिधित्व करता है, इसके बजाय इसकी रैपर कक्षा पर जांच करें। इस प्रकार, जब यह देखता है कि clazz
int.class
है, तो इसे Integer.class
के साथ प्रतिस्थापित करें, और उसके बाद चेक करें। ध्यान दें कि इस तरह से अभी भी यह नहीं बताया गया है कि o
पैरामीटर के रूप में क्या पारित किया गया था या नहीं।
'int',' प्रकार' या यहां तक कि 'isintance' जैसे बहुत सार्थक टैग का उपयोग करने के बजाय, आपको उस भाषा के साथ प्रश्न टैग करना चाहिए जिसका आप उपयोग कर रहे हैं। इससे अधिक दर्शक आकर्षित होंगे, और इसलिए आपको एक संतोषजनक उत्तर प्राप्त करने का मौका बढ़ जाएगा। –
श्रीमान, मैं पूरी तरह से भूल गया। ... मुझे लगता है कि जावा मेरे लिए प्राकृतिक हो गया है: डी – mike
क्या आपने [यह जवाब] पढ़ा था (http://stackoverflow.com/a/7083456/516433) अभी तक? – Lucas