我想知道爲什麼第二個地圖聲明(使用鑽石算子)不能編譯時,第一個。編譯錯誤:與鑽石操作員的雙括號初始化(匿名內部類)
error: cannot infer type arguments for HashMap; Map map2 = new HashMap<>() { reason: cannot use '<>' with anonymous inner classes where K,V are type-variables: K extends Object declared in class HashMap V extends Object declared in class HashMap
代碼:
Map<String, String> map1 = new HashMap<String, String>() { //compiles fine
{
put("abc", "abc");
}
};
Map<String, String> map2 = new HashMap<>() { //does not compile
{
put("abc", "abc");
}
};
編輯
謝謝您的回答 - 我應該更好地閱讀編譯錯誤。 我發現exaplanation在JLS
It is a compile-time error if a class instance creation expression declares an anonymous class using the "<>" form for the class's type arguments.
您的標題中引用的* static *初始值設定項在哪裏? – 2012-03-19 16:15:52
@JonSkeet你是對的,不記得「雙大括號」是怎麼被調用的...... – assylias 2012-03-19 16:16:45
這個錯誤引用了一個'EnumMap',但是你的代碼中只有'HashMap's。 – 2012-03-19 16:16:55