<>

2013-02-14 25 views
5

के साथ अज्ञात वर्ग के माध्यम से एक मानचित्र बनाना जेडीके 1.7 में मैं Collection बना सकता हूं उदा। कहते हैं कि एक HashMap इस तरह:<>

private HashMap<String, String> map = new HashMap<>(); 
अंत में हीरा <> साथ

लेकिन अगर मैं इस तरह एक नक्शा बनाने हूँ:

private static final HashMap<String, String> MAP = new HashMap<>() {{ 
    put("something", "something"); 
}}; 

हीरा संकलक पर कहा गया है कि: ... new HashMap<String, String>() {{.... क्रम में कोड को संकलित करने के:

Cannot use ''<>'' with anonymous inner classes 

मैं उपयोग करना होगा।

ऐसा क्यों है? मैं नक्शा कैसे बना सकता हूं और हीरा का उपयोग कर सकता हूं यदि मैं सिर्फ एक नया उदाहरण बना रहा हूं लेकिन अगर मैं अज्ञात वर्ग के माध्यम से मानचित्र बना रहा हूं तो कोड संकलित नहीं होता है?

+0

दिलचस्प खोज। खुद उत्सुक –

+2

मुझे नहीं लगता कि यह डुप्लिकेट है - यह सवाल पूछ रहा है क्यों। दूसरे प्रश्न के उत्तर वास्तव में नहीं कहते हैं कि सूर्य ने यह फैसला क्यों किया, बस इतना नहीं कि आप इसे नहीं कर सकते। –

+0

@ एमआरस्पून वास्तव में ओरेकल का निर्णय, सूर्य की नहीं .. .. पी – PermGenError

उत्तर

2

यह सिर्फ एक अनुमान है, लेकिन यह वास्तव में HashMap का एक उपवर्ग मुझे यह पसंद नहीं है बनाता है जब आप

new HashMap<>() {{ 
    put("something", "something"); 
}}; 

करते हैं, क्योंकि आप उपवर्गों का एक समूह के साथ अपनी कक्षाओं गंदा। मैं इस मामले में अनुमान लगा रहा हूं कि जावा अनुमान नहीं लगा सकता कि जेनेरिक हीरा प्रकार क्या है क्योंकि यह उप-वर्गीकृत किया जा रहा है।

+3

उचित है, लेकिन मुझे लगता है कि सवाल ओपी पूछ रहा है * क्यों * जावा इस मामले में इसका अनुमान लगाने में असमर्थ है? –

+0

@mattb * यह वास्तव में 'हैश मैप' * –

+0

हाँ का उप-वर्ग बनाता है, लेकिन जैसा कि http://stackoverflow.com/questions/9773733/double-brace-initialisation-anonymous-inner-class-with-diamond-operator पर कहा गया है यह उपclassing के कारण भी है। उस सवाल का जवाब क्यों नहीं है। –