<>

2013-02-14 15 views
5

numaralı bir anonim sınıf aracılığıyla bir harita oluşturma JDK 1.7'de bir Collection oluşturabilirsiniz. Böyle bir HashMap ki: sonunda elmas <> ile<>

private HashMap<String, String> map = new HashMap<>(); 

.

Ama böyle haritasını oluşturarak ediyorsam: ... new HashMap<String, String>() {{.... sırayla kodu derlemek için: Ben kullanmak zorunda

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

: elmas derleyici üzerinde

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

söylüyor.

Neden böyle? Neden yeni bir örnek oluşturuyorsam ancak bir anonim sınıf aracılığıyla bir harita oluşturuyorsam kod derleme yapmıyorsa neden bir harita oluşturabilirim ve elmas kullanabilirim?

+0

İlginç bul. Merak ettim kendimi. –

+2

Yinelenen bir şey olduğunu düşünmüyorum - bu soru NEDEN soruyor. Diğer soruya verilen cevaplar, Sun’un neden bu kararı vermediğini söylemiyor. –

+0

@MrSpoon aslında Oracle'ın kararı değil, Sun'ın ..: P – PermGenError

cevap

2

Bu sadece bir tahmin ama

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

yapınca aslında bu sevmiyorum HashMap bir alt sınıfını oluşturur alt sınıfları bir grup ile yukarı kirli dersleriniz çünkü. Bu durumda tahmin ediyorum Java, jenerik elmas türünün alt sınıfta olduğundan dolayı ne olduğunu anlayamaz.

+3

Haha, ama OP'nin sorduğu soru sanırım * neden * Java bu durumda bu sonuca ulaşamıyor? –

+0

@mattb * Aslında bir "HashMap" * –

+0

Yep alt sınıfı oluşturur, ancak http://stackoverflow.com/questions/9773733/double-brace-initialisation-anonymous-inner-class-with-diamond-operator Ayrıca alt sınıflama nedeniyle. Bu sorunun neden olsa bir cevabı yok. –

İlgili konular