java8新語法

Lambda表達式和函數接口(Functional Interface)

 1     // lambda expressions 
 2     public static void DemoLambda() {
 3         // 不使用lambda表達式
 4         Runnable runnable1 = new Runnable() {
 5             @Override
 6             public void run() {
 7                 System.out.println("do not use lambda expressions!!");
 8             }
 9         };
10         runnable1.run();
11         
12         
13         // 使用lambda表達式
14         Runnable runnable2 = () -> {
15             System.out.println("use lambda expressions!!");
16         };
17         runnable2.run();
18     }

 能夠看到使用了lambda表達式後代碼簡潔了不少。lambda表達式實際就是匿名方法,他由兩部分構成:參數和方法體——方法名和返回類型(經過函數體來推斷)給省略了。例子中的參數爲空,因此給了一個「()」表明參數爲空;「->」表明使用了lambda表達式(c#中使用=>);「{}」中的內容爲方法體,若是隻有一句代碼能夠省略掉「{}」,和for循環同樣。java

另外一個是函數接口。表示只有一個方法的接口就叫函數接口,能夠使用註解 @FunctionalInterface 來標識這個接口是函數接口,但不是必須的。好比 Runnable 這個接口就是函數接口(只有一個方法),因此lambda表達式所實現的方法就是run方法。express

 

 

方法引用

方法引用就是lambda的一種簡化寫法,至關於把方法當成一個變量賦值給另外一個方法,這個方法接受的參數是一個函數接口,他有3中實現:c#

1. 方法是static的:類名::方法名,例如:Math::sinapp

2. 方法不是static的:對象::方法名,例如:StringBuilder sb = new StringBuilder(); sb::appendide

3. 構造方法:類名::new函數

 1 public class MethodDemo {
 2     // 這個方法接受一個函數式接口
 3     public static void HasFunctionalInterface(FunctionalInterfaceDemo fid) {
 4         fid.doSoming("運行在:");
 5     }
 6     
 7     // 3中實現方法
 8     public static void main(String[] args) {
 9         // 第一種實現:new一個匿名的對象
10         HasFunctionalInterface(new FunctionalInterfaceDemo() {
11             @Override
12             public void doSoming(String str) {
13                 System.out.println(str + "之前的實現");
14             }
15         });
16         
17         // 第二種實現:使用lambda表達式
18         // e 是參數,System.out.println("運行在:lambda表達式"); 是方法體
19         HasFunctionalInterface(e -> { System.out.println("運行在:lambda表達式"); });
20         
21         // 第三種實現:使用方法引用
22         FunctionalInterfaceImplements fif = new FunctionalInterfaceImplements();
23         HasFunctionalInterface(fif::doSoming);
24     }
25 }
26 
27 
28 // 實現了函數式接口
29 class FunctionalInterfaceImplements implements FunctionalInterfaceDemo {
30     public void doSoming(String str) {
31         System.out.println(str + "方法的引用");
32     }
33 }
34 
35 
36 // 一個函數式接口
37 @FunctionalInterface
38 interface FunctionalInterfaceDemo {
39     void doSoming(String str);
40 }

 

 java8還更新了不少替他的特性,這裏只是粗略描述一個新的語法

相關文章
相關標籤/搜索