2012-05-11 16 views
6

मैं timelike गुण (java.util.Date, और org.joda.time.DateTime) के साथ अपरिवर्तनीय कक्षाओं का एक सेट बनाने के लिए गूगल के अमरूद ImmutableSet वर्ग उपयोग करने का प्रयास कर रहा हूँ।जावा जेनेरिक्स जैसे रूपांतरण पहेली

private static final ImmutableSet<Class<?>> timeLikeObjects = ImmutableSet.of(Date.class, DateTime.class); 

मैं पूरी तरह से स्टंप कर रहा हूं कि मुझे यह कंपाइलर त्रुटि क्यों मिल रही है (ग्रहण में जावा 1.6)।

Type mismatch: cannot convert from ImmutableSet<Class<? extends Object&Serializable&Comparable<? extends Comparable<?>>>> to ImmutableSet<Class<?>> 

ध्यान दें कि यह काम करता है:

private static final ImmutableSet<?> timeLikeObjects = ImmutableSet.of(Date.class, DateTime.class); 

हालांकि मैं timeLikeObjects प्रकार का सामान्य विवरण के स्पष्ट रूप से ढीला हिस्सा।

मैं एम्परसेंड प्रतीक भर में एक आनुवांशिक वर्णन में कभी नहीं आई है, और यह मान्य सिंटैक्स होना प्रतीत नहीं होता है।

वहाँ जावा जेनेरिक्स में एकाधिक वंशानुक्रम कि मैं सिर्फ याद कर रहा हूँ निर्दिष्ट करने के लिए कोई तरीका है?

उत्तर

17

मूल रूप से संकलक आप के लिए स्मार्ट बनने की कोशिश कर रहा है। यह आपके लिए कुछ सीमाएं काम कर रहा है, और of के रिटर्न प्रकार के लिए उनका उपयोग करने का प्रयास कर रहा है।

सौभाग्य से, आप यह स्पष्ट होने से ठीक कर सकते हैं:

private static final ImmutableSet<Class<?>> timeLikeObjects = 
    ImmutableSet.<Class<?>>of(Date.class, DateTime.class); 

& हिस्सा मान्य सिंटैक्स है - यह कैसे आप कई प्रकार के हैं, उदाहरण के लिए सीमा निर्दिष्ट है

public class Foo<T extends Serializable & Comparable<T>> 

इसका मतलब है कि आप केवल T जो SerializableऔरComparable<T> को लागू करने के लिए प्रकार निर्दिष्ट कर सकते।

+0

जॉन यह एक बेहद प्रबुद्ध प्रतिक्रिया थी। आप समाधान पूरी तरह से काम कर रहे हैं। धन्यवाद! :) –

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