2012-01-30 14 views
8

Map<String, ?> test = ImmutableMap.builder().build(); क्यों संकलित करने में विफल रहता है, लेकिन Map<String, ?> test = ImmutableMap.<String, Object>builder().build(); ठीक काम करता है?ImmutableMap.builder()। Build() सही प्रकार पैरामीटर क्यों नहीं चुनता है?

पहले कोड sniplet विफल रहता है के साथ:

error: incompatible types 
    Map<String, ?> test = ImmutableMap.builder().build(); 
               ^
    required: Map<String,?> 
    found: ImmutableMap<Object,Object> 

मेरा मानना ​​है कि यह काम करने के लिए अमरूद कमिटर मतलब है।

उत्तर

16

यह गुवा में विफलता नहीं है, बल्कि जावा जेनिक्स को हल करने के तरीके में, और ऐसा कुछ है जिसे हम नियंत्रित नहीं कर सकते हैं। = (

हमारा विश्वास करें:। यह कुछ है कि हम पर समय की एक बहुत खर्च इस issue में है, केविन कहा गया है कि हम इसे पाने के लिए इतना है कि आप करने के लिए नहीं था की कोशिश कर के लिए कोई पंद्रह से कम दृष्टिकोण का प्रयास किया स्पष्ट रूप से इन प्रकार पैरामीटर नक्शे में कोई प्रविष्टि नहीं के साथ,

निर्दिष्ट करें।, जो है आप केवल ImmutableMap.builder().build() के मामले में रुचि रखते हैं ... तो आप ImmutableMap.of() का उपयोग कर किया जाना चाहिए। यही कारण है कि के साथ किसी भी अजीब मुद्दों के लिए नहीं होगा जेनेरिक: यह सिर्फ काम करेगा।

+0

क्या यह कुछ ऐसा है जो भाषा में तय किया जा सकता है? यानी, क्या हम ओरेकल के साथ एक बग रिपोर्ट दर्ज कर सकते हैं? – Gili

+0

नहीं ... संभावना है, मुझे डर है। यदि उन्होंने जावा 7 में हीरा ऑपरेटर के साथ संवर्द्धित प्रकार अनुमान में शामिल नहीं किया है, तो मुझे संदेह है कि वे इसे बिल्कुल भी शामिल कर सकते हैं। शायद कुछ अजीब किनारे के मामले हैं जो कुछ कारणों से प्रबंधित करना असंभव होगा, लेकिन मुझे विशिष्टताओं के बारे में निश्चित नहीं है। –

+0

@Gili: मुझे पता है कि जावा 8 के लिए टाइप अनुमान को बेहतर बनाने के लिए कुछ काम चल रहा है ... यह _may_ कुछ ऐसा है जो बेहतर नियमों के साथ अनुमान लगाया जा सकता है, मुझे यकीन नहीं है। – ColinD

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