亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

關(guān)于Java雙大括號(hào){{}}的具體使用

 更新時(shí)間:2022年07月22日 09:32:38   作者:人形bug制造機(jī)9527  
本文主要介紹了關(guān)于Java雙大括號(hào){{}}的具體使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

初看 cgaolei 翻譯的 Java技巧之雙括弧初始化 一文,走馬觀花,只知用法,未細(xì)看后面的解釋。蔚為驚艷,心里想 Java 竟然有這么神奇的語(yǔ)法而一直未得知。因?yàn)樵诔跏蓟蠒r(shí)確實(shí)方便不少。原來(lái)做某些測(cè)試要初始化集合時(shí)會(huì)用到 commons-lang 包和 JDK 的 Arrays 工具類,現(xiàn)在知道可以這么用了:

Map map =newHashMap() {{

put("Name","Unmi");
put("QQ","1125535");
}};
List stooges =newArrayList() {{
add("Larry");
add("Moe");
add("Curly");

看起來(lái)都是在一條語(yǔ)句里完成,而不需要分步驟寫成:

Map map =newHashMap();
map.put("Name","Unmi");
map.put("QQ","1125535");

一不小心沒(méi)好好理解的人可能以為它是什么特別的語(yǔ)法,關(guān)鍵是大括號(hào)連一塊了,原作者也是在故作姿態(tài),美其名曰:雙括弧語(yǔ)法(double-brace syntax)。真是亂花漸欲迷人眼,其實(shí)就是匿名類加初始?jí)K。該文有解釋:***層括弧 實(shí)際是定義了一個(gè)內(nèi)部匿名類 (Anonymous Inner Class),第二層括弧 實(shí)際上是一個(gè)實(shí)例初始化塊 (instance initializer block),這個(gè)塊在內(nèi)部匿名類構(gòu)造時(shí)被執(zhí)行。

那怎么去更好理解它呢?如果我們寫成如下的方式應(yīng)該會(huì)更好理解吧,提個(gè)技巧,在 Eclipse 中對(duì)***段代碼按下 Ctrl + Shift + F 就如下了:

Map map =newHashMap() {

{
put("Name","Unmi");
put("QQ","1125535");
}
};
?

其實(shí)就是匿名類啊,會(huì)創(chuàng)建出一個(gè) HashMap 的子類來(lái),匿名類中一個(gè) {} 括起來(lái)的初始化塊,里面自然可放置初始化代碼。{} 塊中的代碼編譯后會(huì)放到 (),也就是構(gòu)造方法中去,所以可用來(lái)初始化實(shí)例。如果是寫在 TestDoubleBrace 類中,編譯后你會(huì)看到會(huì)生成 TestDoubleBrace$1.class 文件,反編譯該文件內(nèi)容是:

 

finalclasscom.unmi.TestDoubleBrace$1extendsjava.util.HashMap{//創(chuàng)建了一個(gè) HashMap 的子類 TestDoubleBracke$1

com.unmi.TestDoubleBrace$1();

Code:

0:   aload_0

1:   invokespecial   #8;//Method java/util/HashMap."":()V   //{} 中的代碼放到了構(gòu)造方法中去了

4:   aload_0

5:   ldc     #10;//String Name

7:   ldc     #12;//String Unmi

9:   invokevirtual   #14;//Method put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;

12:  pop

13:  aload_0

14:  ldc     #18;//String QQ

16:  ldc     #20;//String 1125535

18:  invokevirtual   #14;//Method put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;

21:  pop

22:return

}

所以說(shuō)白了,什么雙括弧語(yǔ)法啊,就是代碼寫得不規(guī)范,才使得那么的令人費(fèi)解。如果還不能理解,再列兩個(gè)慣用代碼來(lái):

JFrame frame =newJFrame();

frame.addMouseListener(newMouseAdapter() {
publicvoidmouseClicked(MouseEvent e) {
// do womething here.
}
});
Thread thread =newThread() {{// 也學(xué)著樣把大括號(hào)也連一塊寫了
this.setName("作業(yè)處理線程");
}// 如果不重新定義 run() 方法,那么后面那個(gè)大括號(hào)也能與這個(gè)并一塊
publicvoidrun() {
// do something here.
};
thread.start();

 應(yīng)該沒(méi)問(wèn)題了吧,上面是事件監(jiān)聽器和多線程常用的寫法,如果他不把大括號(hào)連在一起,而是規(guī)范的寫代碼,相信您一開始也不會(huì)對(duì)所謂的 Double Brace Syntax 有太多的困惑。要說(shuō)這種初始化方法運(yùn)用到集合中還挺方便的,只是無(wú)端的多了些匿名類。

剛開始我看到這種Java雙括弧寫法也是把它奉若圣經(jīng),對(duì)它只一知半解,昨天在用 XStream 把一個(gè)對(duì)象生成 XML 文件時(shí),其中有一個(gè) List 屬性,我就借用了這種雙括符法來(lái)初始化元素,結(jié)果生成的 XML 文件走了樣,原因是 XStream 的 Converter 能處理 ArrayList,但無(wú)法很好的處理生成的 ArrayList 的匿名子類。因此才回頭認(rèn)真的重新審視了一番這個(gè)所謂的雙括符初始化語(yǔ)法。

以上就是對(duì)Java雙括弧技巧的一些思考。本文來(lái)自隔葉黃鶯 The Blog of Unmi博客,原文名:《也說(shuō) Java 的雙括符初始化, 其實(shí)就是令人費(fèi)解的不規(guī)范代碼》,更多相關(guān)Java雙大括號(hào)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringMVC的五大核心組件用法及說(shuō)明

    SpringMVC的五大核心組件用法及說(shuō)明

    這篇文章主要介紹了SpringMVC的五大核心組件用法及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • springboot-啟動(dòng)bean沖突的解決

    springboot-啟動(dòng)bean沖突的解決

    這篇文章主要介紹了springboot-啟動(dòng)bean沖突的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • IDEA下lombok安裝及找不到get,set的問(wèn)題的解決方法

    IDEA下lombok安裝及找不到get,set的問(wèn)題的解決方法

    這篇文章主要介紹了IDEA下lombok安裝及找不到get,set的問(wèn)題的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • java項(xiàng)目中classpath的理解

    java項(xiàng)目中classpath的理解

    這篇文章介紹了java項(xiàng)目中classpath的理解,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12
  • SpringBoot+Vue+Redis實(shí)現(xiàn)單點(diǎn)登錄(一處登錄另一處退出登錄)

    SpringBoot+Vue+Redis實(shí)現(xiàn)單點(diǎn)登錄(一處登錄另一處退出登錄)

    小編接到一個(gè)需求,需要實(shí)現(xiàn)用戶在瀏覽器登錄后,跳轉(zhuǎn)到其他頁(yè)面,當(dāng)用戶在其它地方又登錄時(shí),前面用戶登錄的頁(yè)面退出登錄,這篇文章主要介紹了SpringBoot+Vue+Redis實(shí)現(xiàn)單點(diǎn)登錄,需要的朋友可以參考下
    2019-12-12
  • mybatis升級(jí)mybatis-plus時(shí)踩到的一些坑

    mybatis升級(jí)mybatis-plus時(shí)踩到的一些坑

    這篇文章主要給大家介紹了關(guān)于mybatis升級(jí)mybatis-plus時(shí)踩到的一些坑,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • SpringBoot如何優(yōu)雅的處理校驗(yàn)參數(shù)的方法

    SpringBoot如何優(yōu)雅的處理校驗(yàn)參數(shù)的方法

    這篇文章主要介紹了SpringBoot如何優(yōu)雅的處理校驗(yàn)參數(shù)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • 查找native方法的本地實(shí)現(xiàn)函數(shù)native_function詳解

    查找native方法的本地實(shí)現(xiàn)函數(shù)native_function詳解

    JDK開放給用戶的源碼中隨處可見Native方法,被Native關(guān)鍵字聲明的方法說(shuō)明該方法不是以Java語(yǔ)言實(shí)現(xiàn)的,而是以本地語(yǔ)言實(shí)現(xiàn)的,Java可以直接拿來(lái)用。這里介紹下查找native方法的本地實(shí)現(xiàn)函數(shù)native_function,感興趣的朋友跟隨小編一起看看吧
    2021-12-12
  • SpringBoot接受前臺(tái)參數(shù)的6種方式以及統(tǒng)一響應(yīng)代碼示例

    SpringBoot接受前臺(tái)參數(shù)的6種方式以及統(tǒng)一響應(yīng)代碼示例

    這篇文章主要給大家介紹了關(guān)于SpringBoot接受前臺(tái)參數(shù)的6種方式以及統(tǒng)一響應(yīng)的相關(guān)資料,前端負(fù)責(zé)展示頁(yè)面和用戶交互,而后端則負(fù)責(zé)處理業(yè)務(wù)邏輯和數(shù)據(jù)存儲(chǔ),在這種架構(gòu)下前端需要將用戶輸入的數(shù)據(jù)發(fā)送給后端進(jìn)行處理,需要的朋友可以參考下
    2023-12-12
  • Java均攤復(fù)雜度和防止復(fù)雜度的震蕩原理分析

    Java均攤復(fù)雜度和防止復(fù)雜度的震蕩原理分析

    這篇文章主要介紹了Java均攤復(fù)雜度和防止復(fù)雜度的震蕩,結(jié)合實(shí)例形式分析了Java均攤復(fù)雜度和防止復(fù)雜度的震蕩相關(guān)概念、原理、實(shí)現(xiàn)方法與注意事項(xiàng),需要的朋友可以參考下
    2020-03-03

最新評(píng)論