HashMap、HashSet、List定義並初始化

HashMap定義並初始化:

Map map = new HashMap() {

    {

         put( "Name" , "Unmi" );

         put( "QQ" , "1125535" );

    }

}; 

List定義並初始化:

List stooges = new ArrayList() {{

    add( "Larry" );

    add( "Moe" );

    add( "Curly" );

}}; 

HashSet定義並初始化:

Set<String> VALID_CODES = new HashSet<String>() {{  

       add("XZ13s");  

       add("AB21/X");  

       add("YYLEX");  

       add("AR2D");  

}};  

原理:

第一層括弧 實際是定義了一個內部匿名類 (Anonymous Inner Class),第二層括弧 實際上是一個實例初始化塊 (instance initializer block),這個塊在內部匿名類構造時被執行。這個塊之所以被叫做“實例初始化塊”是因爲它們被定義在了一個類的實例範圍內。這和“靜態初始化塊 (static initialzer)”不同,因爲這種塊在定義時在括弧前使用了static關鍵字,因此它的和類在同一個範圍內的,也就是說當類加載時就會被執行。實例初始化塊中可以使用其容器範圍內的所有方法及變量,但特別需要注意的是實例初始化塊是在構造器之前運行的。

這種方法只適用於不是final的類,因爲final類是無法建立內部匿名子類,好在集合類都沒有這個限制。因此,這種方法還可以被用來初始化其它任何對象。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章