自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

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

本文來(lái)自Liuu的博客,原文標(biāo)題為《Java7準(zhǔn)備讓函數(shù)成為一等公民》。

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

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

不過(guò),別驚訝,在Java 7發(fā)布之后,“#”或許將成為Java程序員最熟悉的朋友!因?yàn)樵趲滋烨埃?1CTO編輯注:本文翻譯于09年11月底,當(dāng)時(shí)Sun剛剛公布說(shuō)Java 7將包含簡(jiǎn)單的閉包),Sun的Java SE和OpenJDK的首席工程師Mark Reinhold,剛剛宣布Java 7將加入一個(gè)簡(jiǎn)化版的“閉包”特性,其中的關(guān)鍵符號(hào),就是“#”。也因?yàn)檫@個(gè)原因,Java 7的正式發(fā)布時(shí)間,將從2010年2月份,推遲到9月份。

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

簡(jiǎn)單的方法引用示例:

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

  1. String#equals(Object)  

再看一個(gè)例子:

  1. java.io.File#exists()   

事件監(jiān)聽(tīng)器1 (代碼示例,來(lái)自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)聽(tīng)器2(代碼示例,來(lái)自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.  

排序比較器(代碼示例,來(lái)自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.  

甚至或簡(jiǎn)化成:

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

最后,我們復(fù)習(xí)一下javadoc中的#的用法:

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

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

2009-07-21 17:29:25

Scala第一類函數(shù)

2009-09-24 09:38:00

Scala講座第一類對(duì)象scala

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閉包表達(dá)式尾隨閉包

2010-06-01 09:21:52

Java 7閉包

2021-05-28 07:12:59

Python閉包函數(shù)

2010-06-13 14:44:26

Java 7閉包Lambda表達(dá)式

2015-05-27 10:21:55

光纖光通信

2022-08-08 06:50:06

Go語(yǔ)言閉包

2022-08-08 08:31:55

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

2010-05-13 15:41:19

Java 7JDK 7閉包

2010-02-25 16:00:23

驅(qū)動(dòng)程序

2021-05-21 09:01:29

JavaScript 前端函數(shù)閉包

2016-09-14 09:20:05

JavaScript閉包Web

2009-07-24 17:30:37

Javascript閉

2010-02-02 10:33:51

Python

2023-11-02 08:53:26

閉包Python

2021-02-24 07:40:38

React Hooks閉包
點(diǎn)贊
收藏

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