Java 在集合初始化时赋值
大家讲道理
大家讲道理 2017-04-18 09:22:24
0
3
353
List<String> list = new ArrayList<String>(){
            {
                add("hello");
                remove(0);
            }
        };
map = new HashMap<String, Object>(){
            {
                put("name","123");
            }
        };

请问这个语法是来自 Java 几?他的原理又是什么?一个大括号我知道是匿名内部类,但是里面的大括号不知道是什么意思??

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回覆(3)
PHPzhong

這種語法叫做Java的動態初始化塊

它是包含在某個類別裡面一個大括號中的程式碼片段,在類別實例化時會自動呼叫。

例如:

class Person {
    {System.out.print(123);}
}

那麼在呼叫new Person()时就会打印出123

至於你問題中的程式碼,只不過那個動態初始化區塊放到一個匿名類中,所以看起來有點奇怪、不太好理解。但是,畢竟匿名類別也是類別啊,所以是合法的。結果就是在那個匿名類別被實例化的時候,那段程式碼執行了,集合中放進去了幾個元素,相當於初始化了集合。

至於從Java哪個版本開始支援的,我沒有查記不清了,但是估計很早就支持了,只是從Java 5就應該支持了。

最後說一句,用這種方式初始化集合,看起來像黑魔法。

另外,還可以去查一下靜態初始化塊,比較一下它們的差別。

巴扎黑

裡面的大括號是初始化區塊,會在new時構造器呼叫之間執行

黄舟

大括號裡不是匿名內部類,而是構造代碼塊,貌似在構造方法之前執行的(記得不是很清楚了),我把它看成和構造方法一樣的東東。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板