偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Java 7的第一類函數(shù):學習閉包的使用

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

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

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

51CTO編輯推薦:Java 7,下一代Java開發(fā)技術(shù)詳解

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

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

簡單的方法引用示例:

比如要引用String類的equals方法,應(yīng)該這么寫:

  1. String#equals(Object)  

再看一個例子:

  1. java.io.File#exists()   

事件監(jiān)聽器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.  

事件監(jiān)聽器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中的#的用法:

引用當前類的成員字段、方法、構(gòu)造器

  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.  

引用已經(jīng)導入的類的成員字段、方法、構(gòu)造器,或嵌套類

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

責任編輯:yangsai 來源: JavaEye博客
相關(guān)推薦

2009-07-21 17:29:25

Scala第一類函數(shù)

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閉包函數(shù)

2010-06-01 09:21:52

Java 7閉包

2015-05-27 10:21:55

光纖光通信

2022-08-08 06:50:06

Go語言閉包

2022-08-08 08:31:55

Go 語言閉包匿名函數(shù)

2010-06-13 14:44:26

Java 7閉包Lambda表達式

2010-05-13 15:41:19

Java 7JDK 7閉包

2010-02-25 16:00:23

驅(qū)動程序

2016-09-14 09:20:05

JavaScript閉包Web

2009-07-24 17:30:37

Javascript閉

2021-05-21 09:01:29

JavaScript 前端函數(shù)閉包

2023-11-02 08:53:26

閉包Python

2010-02-02 10:33:51

Python
點贊
收藏

51CTO技術(shù)棧公眾號