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