成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

再談Java雙括弧技巧:不規范的語法?

開發 后端
本文就Java雙括弧技巧進行了另一番評論。Java雙括弧令初始化集合方便不少,不過似乎其實就是匿名類加初始塊。

Java雙括弧技巧回顧

初看 cgaolei 翻譯的 Java技巧之雙括弧初始化 一文,走馬觀花,只知用法,未細看后面的解釋。蔚為驚艷,心里想 Java 竟然有這么神奇的語法而一直未得知。因為在初始化集合時確實方便不少。原來做某些測試要初始化集合時會用到 commons-lang 包和 JDK 的 Arrays 工具類,現在知道可以這么用了:

  1. Map map = new HashMap() {{  
  2.   put("Name""Unmi");  
  3.   put("QQ""1125535");  
  4. }};  
  5.  
  6. List stooges = new ArrayList() {{  
  7.   add("Larry");  
  8.   add("Moe");  
  9.   add("Curly");  
  10. }};  
  11.  

看起來都是在一條語句里完成,而不需要分步驟寫成:

  1. Map map = new HashMap();  
  2. map.put("Name","Unmi");  
  3. map.put("QQ","1125535"); 

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

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

  1. Map map = new HashMap() {  
  2.  {  
  3.   put("Name""Unmi");  
  4.   put("QQ""1125535");  
  5.  }  
  6. }; 

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

  1. final class com.unmi.TestDoubleBrace$1 extends java.util.HashMap{ //創建了一個 HashMap 的子類 TestDoubleBracke$1  
  2. com.unmi.TestDoubleBrace$1();  
  3.   Code:  
  4.    0:   aload_0  
  5.    1:   invokespecial   #8//Method java/util/HashMap."<init>":()V   //{} 中的代碼放到了構造方法中去了  
  6.    4:   aload_0  
  7.    5:   ldc     #10//String Name  
  8.    7:   ldc     #12//String Unmi  
  9.    9:   invokevirtual   #14//Method put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;  
  10.    12:  pop  
  11.    13:  aload_0  
  12.    14:  ldc     #18//String QQ  
  13.    16:  ldc     #20//String 1125535  
  14.    18:  invokevirtual   #14//Method put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;  
  15.    21:  pop  
  16.    22:  return 
  17.  
  18. }  

所以說白了,什么雙括弧語法啊,就是代碼寫得不規范,才使得那么的令人費解。如果還不能理解,再列兩個慣用代碼來:

  1. JFrame frame = new JFrame();  
  2. frame.addMouseListener(new MouseAdapter() {  
  3.  public void mouseClicked(MouseEvent e) {  
  4.   // do womething here.  
  5.  }  
  6. });  
  7.  
  8. Thread thread = new Thread() {{ // 也學著樣把大括號也連一塊寫了  
  9.   this.setName("作業處理線程");  
  10.  }// 如果不重新定義 run() 方法,那么后面那個大括號也能與這個并一塊  
  11.  
  12.  public void run() {  
  13.   // do something here.  
  14.  }  
  15. };  
  16. thread.start();  
  17.  

應該沒問題了吧,上面是事件監聽器和多線程常用的寫法,如果他不把大括號連在一起,而是規范的寫代碼,相信您一開始也不會對所謂的 Double Brace Syntax 有太多的困惑。要說這種初始化方法運用到集合中還挺方便的,只是無端的多了些匿名類。

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

以上就是對Java雙括弧技巧的一些思考。本文來自隔葉黃鶯 The Blog of Unmi博客,原文名:《也說 Java 的雙括符初始化, 其實就是令人費解的不規范代碼》

【編輯推薦】

  1. Java語法技巧之雙括弧初始化
  2. Java程序調試技巧淺析
  3. 關于Java反射機制的一個實例
  4. 在Java應用程序中使用Jfreechart配置
  5. 淺談為什么Java接口中不允許定義變量
責任編輯:yangsai 來源: BlogJava
相關推薦

2009-08-12 17:43:54

雙括弧Java語法技巧

2012-09-18 09:17:34

Java規范代碼代碼

2022-05-20 08:17:43

Java日志

2019-10-28 14:37:10

MySQL 數據庫收藏

2021-07-31 23:09:42

GPU內存帶寬

2014-03-17 09:34:01

HTMLHTML閉合

2013-04-18 17:07:36

2010-09-28 15:30:39

3550配置dhcp

2010-06-17 16:27:26

WAP協議

2009-10-27 14:32:45

VB.NET類型級命名

2012-05-17 10:02:02

2024-04-03 09:55:21

代碼Go開發

2023-01-04 09:29:03

線程業務代碼

2009-12-29 20:49:47

綜合布線不規范現象

2009-12-09 10:46:06

PHP檢查語法錯誤

2010-06-18 23:01:16

IT管理安防產業H3C

2010-06-21 21:35:28

運維管理安防行業H3C

2009-12-03 15:24:39

雙wan路由器設置

2011-07-29 10:12:12

JavaScript

2022-09-14 08:22:50

AlloyDB高性能高可用性
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 九色网址 | 久久69精品久久久久久久电影好 | 亚洲国产成人精品女人久久久野战 | 一级片网站视频 | 亚洲欧美日韩精品久久亚洲区 | 精产国产伦理一二三区 | 国产精品久久久久久亚洲调教 | 国产伦精品一区二区三区照片91 | 日韩在线看片 | 国产精品欧美日韩 | 久久骚 | 粉嫩高清一区二区三区 | 激情小视频 | 九九视频在线观看视频6 | www.99精品| 国产日韩一区二区三免费 | av网站在线播放 | 国产高清精品一区二区三区 | 亚洲成人网在线播放 | 欧美1区| 久久久久久久夜 | 秋霞在线一区 | 欧美日韩精品久久久免费观看 | 三级免费毛片 | 综合久久综合久久 | 这里有精品| 欧美日韩中文字幕 | 亚洲国产一区在线 | 中文字幕亚洲欧美 | 久草视频在线播放 | 国产精品3区 | 欧美精品一区二区三区在线 | 91成人免费看 | 福利电影在线 | 欧美福利网站 | 中文字幕啪啪 | 欧美一级黄色片 | 欧美一区二区三区久久精品 | 波多野结衣一二三区 | 91资源在线观看 | 欧美精品网 |