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

Java 7的第一類函數:學習閉包的使用

開發 后端
Java 7最終將會有一個叫做“第一類函數”的簡單閉包特性。本文對如何實現閉包進行了幾個示例介紹,并復習了javadoc中#的用法。

本文來自Liuu的博客,原文標題為《Java7準備讓函數成為一等公民》。

如果你是一個Java程序員,你認識“#”么?讓我猜猜看,應該不太熟吧。因為在Java1.4.2時代,“#”僅僅用于在編寫javadoc的注釋內容,用于鏈接(@see)到對應類的具體方法。除此之外,在編寫代碼的時候,我們幾乎不會用到它。

51CTO編輯推薦:Java 7,下一代Java開發技術詳解

不過,別驚訝,在Java 7發布之后,“#”或許將成為Java程序員最熟悉的朋友!因為在幾天前(51CTO編輯注:本文翻譯于09年11月底,當時Sun剛剛公布說Java 7將包含簡單的閉包),Sun的Java SE和OpenJDK的首席工程師Mark Reinhold,剛剛宣布Java 7將加入一個簡化版的“閉包”特性,其中的關鍵符號,就是“#”。也因為這個原因,Java 7的正式發布時間,將從2010年2月份,推遲到9月份。

在Java 7中,“#”將讓函數方法,成為Java語言的一等公民。下面來看看如何用#語法實現“閉包”的吧:

簡單的方法引用示例:

比如要引用String類的equals方法,應該這么寫:

  1. String#equals(Object)  

再看一個例子:

  1. java.io.File#exists()   

事件監聽器1 (代碼示例,來自Cay Horstmann)

使用閉包前:

  1. button.addActionListener(   
  2. new ActionListener() {  
  3.  public void actionPerformed(ActionEvent ){  
  4. System.out.println("Hi!"); }   
  5.  }   
  6. );  
  7.  

使用閉包后 :

  1. button.addActionListener(#(ActionEvent e) System.out.println("Hi!));  
  2.  

事件監聽器2(代碼示例,來自FSM )

使用閉包前:

  1. public void init() {  
  2. JButton button = ...;  
  3. button.addActionListener(new ActionListener() {  
  4.  public void actionPerformed(ActionEvent ev) {  
  5.  handleAction(ev);  
  6.  }  
  7. });  
  8. }  
  9. public void handleAction(ActionEvent ev) {  
  10. // handle event  
  11. }  
  12.  

使用閉包后:

  1. public void init() {  
  2. JButton button = ...;  
  3. button.addActionListener(this#handleAction(ActionEvent));  
  4. }  
  5. public void handleAction(ActionEvent ev) {  
  6. // handle event  
  7. }  
  8.  

排序比較器(代碼示例,來自FSM 、Cay Horstmann)

使用閉包前:

  1. List<String> list = ...  
  2. Collections.sort(list, new Comparator<String>() {  
  3. public int compare(String str1, String str2) {  
  4.  return str1.length() - str2.length();  
  5. }  
  6. });  
  7.  

使用閉包后:

  1.  List<String> list = ...  
  2. Collections.sort(list, #(String str1, String str2) {  
  3. return str1.length() - str2.length();  
  4. });  
  5.  

甚至或簡化成:

  1. Collections.sort(strings,   
  2. #(String a, String b) a.length() - b.length());   
  3.  

最后,我們復習一下javadoc中的#的用法:

引用當前類的成員字段、方法、構造器

  1. @see#field  
  2.  
  3. @see#method(Type, Type,...)  
  4.  
  5. @see#method(Type argname, Type argname,...)  
  6.  
  7. @see#constructor(Type, Type,...)  
  8.  
  9. @see#constructor(Type argname, Type argname,...)  
  10.  

引用已經導入的類的成員字段、方法、構造器,或嵌套類

  1. @seeClass#field  
  2.  
  3. @seeClass#method(Type, Type,...)  
  4.  
  5. @seeClass#method(Type argname, Type argname,...)  
  6.  
  7. @seeClass#constructor(Type, Type,...)  
  8.  
  9. @seeClass#constructor(Type argname, Type argname,...)  
  10.  
  11. @seeClass.NestedClass  
  12.  
  13. @seeClass 
  14.  

引用其他包里的類成員

  1. @seepackage.Class#field  
  2.  
  3. @seepackage.Class#method(Type, Type,...)  
  4.  
  5. @seepackage.Class#method(Type argname, Type argname,...)  
  6.  
  7. @seepackage.Class#constructor(Type, Type,...)  
  8.  
  9. @seepackage.Class#constructor(Type argname, Type argname,...)  
  10.  
  11. @seepackage.Class.NestedClass  
  12.  
  13. @seepackage.Class  
  14.  
  15. @seepackage   
  16.  

#t#以前曾經翻譯過一篇文章離開Java,尋找更佳語言的10大理由(更新),現在看來Java或許已經聽到了太多這樣的聲音。因此,在Java 7中,里面提到的大部分問題都得到了改進,甚至包括現在突然宣布要加入的閉包,并讓函數成為一等公民。這應該是一件好事,只是,有個小小的疑惑,Java似乎越來越像Ruby這樣的動態語言了,Java 7還會是我們熟悉的Java么?

責任編輯:yangsai 來源: JavaEye博客
相關推薦

2009-07-21 17:29:25

Scala第一類函數

2009-09-24 09:38:00

Scala講座第一類對象scala

2025-05-22 09:35:24

2009-07-22 07:43:00

Scala閉包

2020-10-14 15:15:28

JavaScript(

2011-05-25 14:48:33

Javascript閉包

2024-01-22 09:51:32

Swift閉包表達式尾隨閉包

2021-05-28 07:12:59

Python閉包函數

2010-06-01 09:21:52

Java 7閉包

2010-06-13 14:44:26

Java 7閉包Lambda表達式

2015-05-27 10:21:55

光纖光通信

2022-08-08 06:50:06

Go語言閉包

2022-08-08 08:31:55

Go 語言閉包匿名函數

2010-05-13 15:41:19

Java 7JDK 7閉包

2010-02-25 16:00:23

驅動程序

2016-09-14 09:20:05

JavaScript閉包Web

2009-07-24 17:30:37

Javascript閉

2021-05-21 09:01:29

JavaScript 前端函數閉包

2010-02-02 10:33:51

Python

2023-11-02 08:53:26

閉包Python
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲成av| 国产精品欧美一区二区三区不卡 | 免费99精品国产自在在线 | 永久www成人看片 | 中文精品视频 | 拍拍无遮挡人做人爱视频免费观看 | 亚洲精品久久久久久久久久久 | 久久久久亚洲精品 | 中文字幕丁香5月 | 日本精品国产 | 五月天婷婷久久 | 国产ts人妖系列高潮 | 激情五月综合 | 久久久久久久久久久福利观看 | 中文在线一区二区 | 久久精品国产一区二区三区不卡 | 欧美日韩精品久久久免费观看 | 围产精品久久久久久久 | 国产欧美精品一区二区色综合朱莉 | 久久精品色欧美aⅴ一区二区 | 久久99久久久久 | 97精品超碰一区二区三区 | 成人午夜网站 | 久久久久国产精品 | 91精品国产色综合久久不卡蜜臀 | 欧美日韩视频在线 | 九九亚洲精品 | 九九久久精品 | 9999国产精品欧美久久久久久 | 久久成人免费 | 青娱乐av | 欧美一级片久久 | 国产高清视频 | 欧美精品综合在线 | 国产超碰人人爽人人做人人爱 | 精品日韩在线观看 | 成年人在线 | av黄色在线 | 精品日韩一区二区三区av动图 | 欧美国产91 | 国产精品99久久久久久动医院 |