List<String> list = new ArrayList<String>(){
{
add("hello");
remove(0);
}
};
map = new HashMap<String, Object>(){
{
put("name","123");
}
};
请问这个语法是来自 Java 几?他的原理又是什么?一个大括号我知道是匿名内部类,但是里面的大括号不知道是什么意思??
PHPz2017-04-18 09:24:24
這種語法叫做Java的動態初始化塊。
它是包含在某個類別裡面一個大括號中的程式碼片段,在類別實例化時會自動呼叫。
例如:
class Person {
{System.out.print(123);}
}
那麼在呼叫new Person()
时就会打印出123
。
至於你問題中的程式碼,只不過那個動態初始化區塊放到一個匿名類中,所以看起來有點奇怪、不太好理解。但是,畢竟匿名類別也是類別啊,所以是合法的。結果就是在那個匿名類別被實例化的時候,那段程式碼執行了,集合中放進去了幾個元素,相當於初始化了集合。
至於從Java哪個版本開始支援的,我沒有查記不清了,但是估計很早就支持了,只是從Java 5就應該支持了。
最後說一句,用這種方式初始化集合,看起來像黑魔法。
另外,還可以去查一下靜態初始化塊,比較一下它們的差別。