निम्नलिखित कार्यक्रम प्रिंट क्रमशः 'गलत' और 'सच':अवांछित autoboxing जादू
Number n = true ? new Long(1) : new Double(2.0);
System.out.println(n instanceof Long);
System.out.println(n instanceof Double);
तो यह एक लंबे समय से है, लेकिन एक डबल नहीं होगा। हालांकि, यह सामान्य वर्गों पर इरादा काम करता है:
class B {}
class D1 extends B {}
class D2 extends B {}
होने इस 'सही' प्रिंट होगा:
B b = true ? new D1() : new D2();
System.out.println(b instanceof D1);
जिसका अर्थ है कि यह ऊपर के उदाहरण की तरह ही काम नहीं कर रहा।
मुझे यकीन है कि ऑटोबॉक्सिंग से संबंधित कुछ है, लेकिन क्या यह वास्तव में काम करना चाहिए? वह मुक्केबाजी का उपयोग क्यों करती है, जब संख्या वर्ग लंबी और दोहरी दोनों का सुपरक्लास होता है, तो अभिव्यक्ति का मूल्यांकन संख्या में किया जा सकता है?
यह वास्तव में दर्द है, क्योंकि एन प्रिंट करते समय, यह डबल मान के रूप में प्रिंट करता है। (मैं इसे वैकल्पिक हल के लिए आसान है पता है, लेकिन मुझे पागल कर दिया)
':' प्रकार लेता है अंतिम अभिव्यक्ति का। यदि आपने इसे 'शून्य' बनाया है तो यह 'लांग' होगा: पी। –
नहीं, यह अंतिम अभिव्यक्ति का प्रकार नहीं लेता है, बस दूसरे उदाहरण को देखें। बेशक कोड सिर्फ एक उदाहरण है, लेकिन कल्पना करें कि कुछ असली बुलियन जानकारी है जहां अब 'सत्य' ट्रेनेरी में खड़ा है। – poroszd
करीबी वोट क्यों? यह मेरे लिए एक अच्छा सवाल है। –