उदाहरण के लिए:जावा कंपाइलर कभी-कभी शून्य के अनबॉक्सिंग की अनुमति क्यों देता है?
int anInt = null;
संकलन समय पर विफल रहता है लेकिन
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
System.out.println("" + getSomeVal());
}
}
public static int getSomeVal() {
return new Random().nextBoolean() ? 1 : null;
}
रन टाइम पर विफल रहता है (आमतौर पर)। null
को वापस करने की कोशिश करने के परिणामस्वरूप संकलन त्रुटि भी होगी, इसलिए मुझे लगता है कि संकलक को null
अनुमानित करने के लिए कई पथ होने के बारे में कुछ ऐसा है जो संभावित रूप से एक ऑटोबॉक्स्ड int
है? जावैक एक ही त्रुटि के साथ दोनों मामलों को संकलित करने में विफल क्यों नहीं हो सकता है?
पहले मामले में एक शून्य प्रकार "प्रकार" को अंतर्निहित रूप से एक प्रकार के प्रकार में डाला जा रहा है, आर एक कंपाइलर त्रुटि में उलझन में।दूसरा मामला स्पष्ट रूप से बाएं हाथ परिवर्तनीय प्रकार के लिए शून्य हो जाता है, जो वापसी मूल्य की बजाय अभिव्यक्ति का प्रकार है। मुझे लगता है कि जेएलएस 15.25 का सावधानीपूर्वक पढ़ना "यदि दूसरे और तीसरे ऑपरेंड के पास एक ही प्रकार है (जो शून्य प्रकार हो सकता है), तो वह सशर्त अभिव्यक्ति का प्रकार है।" आपको यह देता है, क्योंकि जावा कंपाइलर एक प्रकार का int नहीं दे सकता है और इसलिए इसे अनबॉक्सिंग करके दोनों के लिए इंटीजर का उपयोग करने के लिए मजबूर किया जाता है। बहुत स्पष्ट उत्तर, धन्यवाद। – MilesHampson