2016-01-15 12 views
5

मुझे इतना सामान्य प्रश्न शीर्षक के बारे में क्षमा करें, लेकिन यह सुनिश्चित नहीं था कि मेरे प्रश्न को सही तरीके से कैसे कॉल करें।वाइल्डकार्ड और स्थिर रैपर के साथ जावा जेनरिक

Collections.singleton कॉल का परिणाम के डिफ़ॉल्ट प्रकार देखें:

Set<Number> numberSingleton = 
    Collections.singleton((Number) null); 

Set<Collection> rawCollectionSingleton = 
    Collections.singleton((Collection) null); 

Set<Collection<String>> stringCollectionSingleton = 
    Collections.singleton((Collection<String>) null); 

Set<? extends Collection<?>> anyCollectionSingleton = 
    Collections.singleton((Collection<?>) null); 

क्या मैं व्याख्या नहीं कर सकते अंतिम पंक्ति है। ? extends Collection<?> का उपयोग सरल Collection<?> के बजाय क्यों किया जाता है?

क्या यह इस के लिए सही समाधान है?

Set<Collection<?>> anyCollectionSingleton = 
    Collections.<Collection<?>>singleton((Collection<?>) null); 

मैं यह सब क्यों शुरू कर दिया:

java.util.Optional.ofNullable((Collection<?>) a).orElse((Collection<?>) b); 

यह समस्या ठीक करने के लिए लगता है, लेकिन कीमत क्या है:

मैं संकलन नहीं लाइन के साथ एक मुद्दा था?

java.util.Optional.<Collection<?>>ofNullable((Collection<?>) a).orElse((Collection<?>) b); 
+0

आपका प्रश्न यह है कि आईडीई उस अजीब प्रकार को क्यों उत्पन्न करता है? क्योंकि सेट <संग्रह > सिंगलटन = संग्रह। सिंगलेटन ((संग्रह ) शून्य); ठीक काम करता है – AdamSkywalker

+0

ओरेकल जेडीके 1.8.0_40 मुझे संकलन त्रुटि देता है 'जावा: असंगत प्रकार: java.util.Set > java.util.Set > '। आप किस जावा संस्करण का उपयोग करते हैं? – Gedrox

+0

नवीनतम, 1.8.0_66 – AdamSkywalker

उत्तर

0

नहीं, यह एक पूरी तरह से अलग अवधारणा है।

क्या अर्थ होता है

Set<? extends Collection<?>> anyCollectionSingleton = 
Collections.singleton((Collection<?>) null); 

साथ प्रयोग किया जा करने के लिए है कि आप एक सामान्य वर्ग है कि जेनेरिक कक्षाओं का एक संग्रह प्रदान करता है।

तो, यह विरासत के बारे में है।

+0

लेकिन क्यों 'संग्रह ' के साथ मामला नहीं है? – Gedrox

+0

सामान्य रूप से, एक स्वतंत्र वर्ग की तरह कुछ में 'स्ट्रिंग', क्योंकि यह सीधे 'ऑब्जेक्ट' वर्ग से विरासत में मिलता है, जबकि उदाहरण के लिए 'इंटेगर' वर्ग 'संख्या' से प्राप्त होता है। क्या यह आपके मामले के लिए पर्याप्त है? यदि आपका मतलब कुछ और था, तो एक उदाहरण उपयोगी हो सकता है। – thodorisbais

+0

मेरा मतलब था कि 'संग्रह ' सेट 'संग्रह <संग्रह >' और 'सेट <नहीं' का उत्पादन क्यों करता है? संग्रह > 'फिर संग्रह ''मामले में विस्तारित करता है? – Gedrox

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