AMethod(new HashSet<String>() {{
add("XZ13s");
add("AB21/X");
add("YYLEX");
add("AR5E");
}});
第一層括弧 實(shí)際是定義了一個(gè)內(nèi)部匿名類(lèi) (Anonymous Inner Class),第二層括弧 實(shí)際上是一個(gè)實(shí)例初始化塊 (instance initializer block),這個(gè)塊在內(nèi)部匿名類(lèi)構(gòu)造時(shí)被執(zhí)行。這個(gè)塊之所以被叫做“實(shí)例初始化塊”是因?yàn)樗鼈儽欢x在了一個(gè)類(lèi)的實(shí)例范圍內(nèi)。這和“靜態(tài)初始化塊 (static initialzer)”不同,因?yàn)?#8220;靜態(tài)初始化塊”塊在定義時(shí)在括弧前使用了static關(guān)鍵字,因此它得和類(lèi)在同一個(gè)范圍內(nèi)的,也就是說(shuō)當(dāng)類(lèi)加載時(shí)就會(huì)被執(zhí)行(更詳情,可參考Java語(yǔ)言規(guī)范http://java.sun.com/docs/books/jls/third_edition/html/classes.html#8.6 )。實(shí)例初始化塊中可以使用其容器范圍內(nèi)的所有方法及變量,但特別需要注意的是實(shí)例初始化塊是在構(gòu)造器之前運(yùn)行的。
add("XZ13s");
add("AB21/X");
add("YYLEX");
add("AR5E");
}});
第一層括弧 實(shí)際是定義了一個(gè)內(nèi)部匿名類(lèi) (Anonymous Inner Class),第二層括弧 實(shí)際上是一個(gè)實(shí)例初始化塊 (instance initializer block),這個(gè)塊在內(nèi)部匿名類(lèi)構(gòu)造時(shí)被執(zhí)行。這個(gè)塊之所以被叫做“實(shí)例初始化塊”是因?yàn)樗鼈儽欢x在了一個(gè)類(lèi)的實(shí)例范圍內(nèi)。這和“靜態(tài)初始化塊 (static initialzer)”不同,因?yàn)?#8220;靜態(tài)初始化塊”塊在定義時(shí)在括弧前使用了static關(guān)鍵字,因此它得和類(lèi)在同一個(gè)范圍內(nèi)的,也就是說(shuō)當(dāng)類(lèi)加載時(shí)就會(huì)被執(zhí)行(更詳情,可參考Java語(yǔ)言規(guī)范http://java.sun.com/docs/books/jls/third_edition/html/classes.html#8.6 )。實(shí)例初始化塊中可以使用其容器范圍內(nèi)的所有方法及變量,但特別需要注意的是實(shí)例初始化塊是在構(gòu)造器之前運(yùn)行的。
這種方法只適用于不是final的類(lèi),因?yàn)閒inal類(lèi)是無(wú)法建立內(nèi)部匿名子類(lèi),好在集合類(lèi)都沒(méi)有這個(gè)限制。因此,這種方法還可以被用來(lái)初始化其它任何對(duì)象,比如一個(gè)GUI對(duì)象:
這樣建立的內(nèi)部匿名類(lèi)的實(shí)例中包函它容器對(duì)像的引用。如果串行化(serialization)這個(gè)集合同時(shí)也會(huì)串行化它的內(nèi)部類(lèi).
開(kāi)心過(guò)好每一天。。。。。