2012-08-11 19 views
8

Class<? extends Integer> के साथ वाइल्डकार्ड ठीक संकलित करेगा, लेकिन Integer एक अंतिम प्रकार है, इसलिए इसे ऊपरी सीमा के रूप में उपयोग करने के लिए यह समझ में नहीं आता है (कुछ भी extend यह कभी भी नहीं होगा)।अंतिम ऊपरी बाउंड

आप एक प्रकार पैरामीटर के लिए एक ऊपरी बाध्य रूप में एक अंतिम प्रकार का उपयोग करने का प्रयास करें, तो आप एक संकलक चेतावनी मिल जाएगा:

प्रकार पैरामीटर टी अंतिम प्रकार पूर्णांक से घिरा नहीं किया जाना चाहिए। अंतिम प्रकार आगे

नहीं बढ़ाई जा सकती क्यों एक ऊपरी बाध्य रूप में एक अंतिम प्रकार का उपयोग होता है के लिए वाइल्डकार्ड के बिल्कुल ठीक हो, लेकिन एक प्रकार पैरामीटर के लिए एक चेतावनी फेंक? जावा भी अंतिम ऊपरी प्रकार से वाइल्डकार्ड को बाध्य करने की इजाजत क्यों देता है?

उत्तर

5

Class<Integer>Class<? extends Integer> के रूप में असाइनमेंट के लिए अनुमत नहीं है।

उदाहरण के लिए, इस संकलित:

Class<? extends Number> numberClass = Integer.class; 
Class<? extends Integer> integerClass = numberClass.asSubclass(Integer.class); 

यह नहीं करता है: मैं स्वयं

Class<? extends Number> numberClass = Integer.class; 
Class<Integer> integerClass = numberClass.asSubclass(Integer.class); 

, मैं एक संकलक चेतावनी नहीं मिल सका के रूप में आप करते हैं (शायद आपको एक उदाहरण प्रदान कर सकता है और आपके कंपाइलर पर विवरण?)।

+1

ऐसा लगता है कि संकलक स्वयं के लिए यह समझ सकता है कि 'कक्षा 'आपके दूसरे उदाहरण से लौटाया गया है 'कक्षा ' के साथ संगत है क्योंकि 'इंटीजर' अंतिम है। लेकिन मुझे लगता है कि इसके लायक से कंपाइलर को और जटिलता जोड़नी होगी। शायद चेतावनी ग्रहण विशिष्ट है: ग्रहण जूनो डब्ल्यू/जेडीटी 3.8.0। – Jeffrey

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