最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java雙括弧初始化操作技巧

 更新時間:2015年12月15日 11:03:45   投稿:lijiao  
這篇文章主要介紹了Java雙括弧初始化操作技巧,這種方法不僅提高了代碼的可讀性,而且簡化了代碼的數(shù)量,需要的朋友可以參考下

由于Java語言的集合框架中(collections, 如list, map, set等)沒有提供任何簡便的語法結(jié)構(gòu),這使得在建立常量集合時的工作非常繁索。每次建立時我們都要做:

定義一個臨時的集合類變量 建立一個空集合的實例,然后賦值給變量 將數(shù)據(jù)放入集合中 最后將集合做為參數(shù)傳遞給方法

例如,要將一個Set變量傳給一個方法:

Set validCodes = new HashSet();
validCodes.add("XZ13s");
validCodes.add("AB21/X");
validCodes.add("YYLEX");
validCodes.add("AR2D");
removeProductsWithCodeIn(validCodes);

也可以用靜態(tài)初始的方法

private static final Set validCodes = new HashSet();
static {
validCodes.add("XZ13s");
validCodes.add("AB21/X");
validCodes.add("YYLEX");
validCodes.add("AR2D");
}
private static final Set validCodes = new HashSet();
static {
validCodes.add("XZ13s");
validCodes.add("AB21/X");
validCodes.add("YYLEX");
validCodes.add("AR2D");
}

其實,還有簡結(jié)的方法,我們可以用雙括弧語法(double-brace syntax)建立并初始化一個新的集合:

private static final Set VALID_CODES = new HashSet() {{
add("XZ13s");
add("AB21/X");
add("YYLEX");
add("AR2D");
}};
private static final Set VALID_CODES = new HashSet() {{
add("XZ13s");
add("AB21/X");
add("YYLEX");
add("AR2D");
}};

或者

removeProductsWithCodeIn(new HashSet() {{
add("XZ13s");
add("AB21/X");
add("YYLEX");
add("AR5E");
}});
removeProductsWithCodeIn(new HashSet() {{
add("XZ13s");
add("AB21/X");
add("YYLEX");
add("AR5E");
}});

第一層括弧 實際是定義了一個內(nèi)部匿名類 (Anonymous Inner Class),第二層括弧 實際上是一個實例初始化塊 (instance initializer block),這個塊在內(nèi)部匿名類構(gòu)造時被執(zhí)行。這個塊之所以被叫做“實例初始化塊”是因為它們被定義在了一個類的實例范圍內(nèi)。這和“靜態(tài)初始化塊 (static initialzer)”不同,因為這種塊在定義時在括弧前使用了static關(guān)鍵字,因此它的和類在同一個范圍內(nèi)的,也就是說當(dāng)類加載時就會被執(zhí)行

實例初始化塊中可以使用其容器范圍內(nèi)的所有方法及變量,但特別需要注意的是實例初始化塊是在構(gòu)造器之前運行的。

這種方法只適用于不是final的類,因為final類是無法建立內(nèi)部匿名子類,好在集合類都沒有這個限制。因此,這種方法還可以被用來初始化其它任何對象,比如一個GUI對象:

add(new JPanel() {{
setLayout(...);
setBorder(...);
add(new JLabel(...));
add(new JSpinner(...));
}});
add(new JPanel() {{
setLayout(...);
setBorder(...);
add(new JLabel(...));
add(new JSpinner(...));
}});

這樣建立的內(nèi)部匿名類的實例中包函它容器對像的引用。如果串行化(serialization)這個集合同時也會串行化它的內(nèi)部類。

另外,這種雙括號初始化的方式針對map的初始化工作可以減少很多代碼,請看:       

 Map<String, Set<String>> baselineMap = new HashMap<>();
      final String schema = "schema";
      if (baselineMap.get(type) == null) {
        baselineMap.put(type, new HashSet<String>() {{
          add(schema);
        }});
      } else {
        baselineMap.put(type, new HashSet<String>(baselineMap.get(type)) {{
          add(schema);
        }});
      }

這段代碼我相信不用特別解釋,基本都能看懂,想想如果不用雙括號初始化的方式的話需要多寫多少行代碼!~

以上就是關(guān)于Java雙括弧初始化的技巧,提高了代碼的可讀性,而且簡化了代碼的數(shù)量,大家可以嘗試應(yīng)用到自己的項目中。

相關(guān)文章

  • JAVA 線程通信相關(guān)知識匯總

    JAVA 線程通信相關(guān)知識匯總

    這篇文章主要介紹了JAVA 線程通信相關(guān)知識,文中講解非常細致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • 淺談JAVA并發(fā)之ReentrantLock

    淺談JAVA并發(fā)之ReentrantLock

    本文主要介紹了基于AQS實現(xiàn)的ReentrantLock(重入鎖),感興趣的同學(xué),可以參考下。
    2021-06-06
  • Java實現(xiàn)定時任務(wù)的方法詳解

    Java實現(xiàn)定時任務(wù)的方法詳解

    大家都用過鬧鐘,鬧鐘可以說是一種定時任務(wù)。那么,在?Java?中,如何實現(xiàn)這樣的功能呢?即如何實現(xiàn)定時任務(wù)呢?本文就來詳細和大家聊聊
    2022-10-10
  • 基于Java ORM框架的使用詳解

    基于Java ORM框架的使用詳解

    本篇文章是對Java中ORM框架的使用進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • Java序列化反序列化原理及漏洞解決方案

    Java序列化反序列化原理及漏洞解決方案

    這篇文章主要介紹了Java序列化反序列化原理及漏洞解決方案,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-08-08
  • Mybatis中注入執(zhí)行sql查詢、更新、新增及建表語句案例代碼

    Mybatis中注入執(zhí)行sql查詢、更新、新增及建表語句案例代碼

    這篇文章主要介紹了Mybatis中注入執(zhí)行sql查詢、更新、新增以及建表語句,主要說明一個另類的操作,注入sql,并使用mybatis執(zhí)行,結(jié)合案例代碼詳解講解,需要的朋友可以參考下
    2023-02-02
  • springboot jsp支持以及轉(zhuǎn)發(fā)配置方式

    springboot jsp支持以及轉(zhuǎn)發(fā)配置方式

    文章介紹了如何在Spring Boot項目中配置和使用JSP,并提供了一步一步的指導(dǎo),包括添加依賴、配置文件設(shè)置、控制器和視圖的使用
    2024-12-12
  • 使用java連接Redis,Maven管理操作

    使用java連接Redis,Maven管理操作

    這篇文章主要介紹了使用java連接Redis,Maven管理操作,具有很好的參考價值,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • 一篇文章徹底理解SpringIOC、DI

    一篇文章徹底理解SpringIOC、DI

    這篇文章主要給大家介紹了關(guān)于對SpringIOC、DI的理解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Java實現(xiàn)一致性Hash算法詳情

    Java實現(xiàn)一致性Hash算法詳情

    這篇文章主要介紹了Java實現(xiàn)一致性Hash算法詳情,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-09-09

最新評論

怀远县| 平定县| 江陵县| 蓝山县| 陆丰市| 青田县| 孝昌县| 黄平县| 安远县| 徐水县| 新巴尔虎左旗| 石狮市| 灵寿县| 邢台县| 葫芦岛市| 枝江市| 辽宁省| 巧家县| 宜兰县| 同仁县| 潞西市| 宁强县| 百色市| 上饶市| 高淳县| 黄山市| 凉城县| 丰都县| 海丰县| 乐至县| 哈尔滨市| 普陀区| 城固县| 广饶县| 洛南县| 商城县| 福建省| 老河口市| 巨鹿县| 平江县| 安平县|