我知道這個代碼:Java雙大括號初始化始終工作?
Set<String> set = new HashSet<String>() {{
add("test1");
add("test2");
}};
是真的:構造塊之前正在執行
Set<String> set = new HashSet<String>() {
{//initializer
add("test1");
add("test2");
}
};
的初始化塊。在上面的例子中,在執行構造函數之前調用add(「test1」)。構造函數可能正在初始化許多實例字段,以便該類可以工作。我想知道爲什麼在構造函數工作之前調用.add()?有沒有導致問題的情況?
這可能會屬於'未指定的行爲'... – 11684
有趣的問題。我沒有真正的答案,但我認爲你在這裏做出了一個錯誤的假設。如果你看看HashSet的構造函數,它會這樣做:'map = new HashMap();'和add方法執行此操作:'返回map.put(e,PRESENT)== null;'。如果你的假設是正確的,這將導致一個NPE。 –
[認爲這種「模式」是否真的值得麻煩肯定沒錯](http://stackoverflow.com/q/924285/521799) –