2009-10-30 13 views
10

मैं प्राचीन और संदर्भ प्रकारों के बीच जावा में व्यवहार से आश्वस्त करने की बेहतर समझ प्राप्त करना चाहता हूं।isAssignable संदर्भ और आदिम प्रकारों के साथ

उदाहरण के लिए:

System.out.println(boolean.class.isAssignableFrom(Boolean.class)); // false 
System.out.println(Boolean.class.isAssignableFrom(boolean.class)); // false 

boolean primitive; 
Boolean referenceType = true; 
primitive = referenceType; 
System.out.println(primitive); // true 

मुझे पता है कि जब पुरातन बताए < -> संदर्भ कि मुक्केबाजी/unboxing होता है के रूप में आवश्यक है, लेकिन मैंने सोचा है चाहते हैं कि इसलिए isAssignableFrom ऊपर पहले दो उदाहरण में सच लौट आते हैं।

क्या कोई यह बता सकता है कि यह झूठा क्यों लौटाता है, और यहां उचित परीक्षा क्या है?

उत्तर

11

आप नहीं वास्तव में एक Boolean चर करने के लिए एक boolean मूल्य प्रदान कर सकते हैं - लेकिन आप ऑटो मुक्केबाजी का उपयोग कर Boolean को boolean से बदल सकते हैं।

JavaDocs नियम बहुत स्पष्ट हो जाता है:

निर्धारित करता है कि वर्ग या इंटरफ़ेस इस वर्ग वस्तु का प्रतिनिधित्व करती है या तो के रूप में ही है, या एक सुपर क्लास या की superinterface, वर्ग या है इंटरफ़ेस निर्दिष्ट क्लास पैरामीटर द्वारा दर्शाया गया है। तो यह सच हो जाता है; अन्यथा यह झूठी वापसी करता है। यदि यह क्लास ऑब्जेक्ट आदिम प्रकार का प्रतिनिधित्व करता है, तो यह विधि सत्य देता है यदि निर्दिष्ट क्लास पैरामीटर बिल्कुल इस क्लास ऑब्जेक्ट है; अन्यथा यह झूठी वापसी करता है।

6

javadocs from 1.4 पहले से ही है कि निर्दिष्ट करें:

इस क्लास वस्तु एक आदिम प्रकार का प्रतिनिधित्व करता है, तो इस विधि TRUE देता निर्दिष्ट कक्षा पैरामीटर वास्तव में इस वर्ग वस्तु है; अन्यथा यह झूठी वापसी करता है।

तो ऑटो बॉक्सिंग शुरू होने से पहले इस विधि का व्यवहार बंद कर दिया गया था, और बदला नहीं जा सकता (एक नई विधि पेश की जानी चाहिए)।

इस bug report को देखते हुए, यह स्पष्ट है कि क्लास ऑब्जेक्ट के चारों तरफ के किनारे के मामलों और ऑटो मुक्केबाजी में बदलावों को पूरी तरह से संभाला नहीं गया था।

अपने प्रश्न के दूसरे भाग का उत्तर देने के लिए, मुझे इस मामले का परीक्षण करने का एकमात्र तरीका यह है कि यदि बयानों या कुछ समान रिज़ॉल्यूशन तंत्र की श्रृंखला है जो प्राचीन वर्ग प्रकार "बॉक्स" है।

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