搜尋

首頁  >  問答  >  主體

Java 在集合初始化时赋值

List<String> list = new ArrayList<String>(){
            {
                add("hello");
                remove(0);
            }
        };
map = new HashMap<String, Object>(){
            {
                put("name","123");
            }
        };

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

大家讲道理大家讲道理2893 天前359

全部回覆(3)我來回復

  • PHPz

    PHPz2017-04-18 09:24:24

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

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

    例如:

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

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

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

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

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

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

    回覆
    0
  • 巴扎黑

    巴扎黑2017-04-18 09:24:24

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

    回覆
    0
  • 黄舟

    黄舟2017-04-18 09:24:24

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

    回覆
    0
  • 取消回覆