2016-08-04 13 views
6

मैं निम्नलिखित कोड है, जो जावा 8 पर ठीक काम करता है:जावा वाइल्डकार्ड अंतर और 8

List<Class<?>> KEY_NAME_CLASSES = Collections.singletonList(String.class); 

लेकिन जब मैं जावा 7 संकलक इस्तेमाल करने की कोशिश, मैं कोई त्रुटि मिलती है:

incompatible types: java.util.List<java.lang.Class<java.lang.String>> cannot be converted to java.util.List<java.lang.Class<?>> 

क्यों? जावा 7 में ऐसे वाइल्डकार्ड का उपयोग करने का कोई तरीका है?

उत्तर

10

जावा -7 और जावा -8 में टाइप अनुमान अलग-अलग है। संक्षेप में, अभिव्यक्ति प्रकार निर्धारित करने के लिए जावा -7 केवल अभिव्यक्ति का उपयोग करता है जबकि जावा -8 आसपास के संदर्भ का उपयोग कर सकता है। इसलिए जावा -7 में Collections.singletonList(String.class) अभिव्यक्ति का प्रकार सबसे सटीक प्रकार है जिसे इस अभिव्यक्ति से निर्धारित किया जा सकता है, अर्थात् List<Class<String>>। जावा -8 स्मार्ट है: यह भी लगता है कि यह अभिव्यक्ति किसी अन्य अभी तक संगत प्रकार List<Class<?>> पर असाइन की गई है, इसलिए यह Collections.singletonList(String.class)List<Class<?>> के प्रकार को भी सेट करता है।

List<Class<?>> KEY_NAME_CLASSES = Collections.<Class<?>>singletonList(String.class); 
:

इस कोड में काम करने के लिए जावा-7 आप सामान्य प्रकार स्पष्ट रूप से निर्दिष्ट करना चाहिए

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