Java 8新特性學習之一:Java 8 lambda表示式初步第一回

孫小光發表於2016-06-05

這幾天正在學關於Java lambda表示式,在這裡就自己學習的一點心得體會寫一上,就當我的讀書筆記吧。

函數語言程式設計在我的初步理解來看,就是相當於JavaScript中的Function型別。就是可以把方法當成引數進行傳遞。

lambda表示式有兩個重要的結構:一、lambda表示式自身。二、函式式介面。

lambda表示式本質上就是匿名方法,主要用於為函式式介面所定義的方法提供一個實現。也就是為lambda表示式會提供一個匿類,因為些lambda有時候也會被稱為閉包。

函式式介面,是指只提供有一個抽象方法定義的介面。在Java8之前介面中的方法是不提供方法實現的,但是在Java8中介面中的方法是可以提供預設實現的。所以函式式介面,在Java8之中的定義是:“只提供有一個沒有預設實現的抽象方法的介面”。

一、lambda表示式的使用。

下面舉一個例子:

//函式式介面  
public interface Abc{
       public double getValue();
}

Abc abc = ()->123.0;

當呼叫abc.getValue();函式接返回123.0。

需要重點指出的是,lambda表示式在引數型別和數量、返回型別以及發生的異常都需要被函式式介面的方法所接受。

當需要為lambda表示式指定引數時,

(int n)->123.0*n;

當然引數型別是可以不寫的,這個可以通過函式式介面中定義的方法引數推斷。當lambda表示式引數只有一個時括號是可以省略的。

n->123.0*n;  

這部分還有最後一點是,如果lambda表示式有兩個引數時引數型別。如果省略都省略,不然都要寫上。

  (n,b)->123.0*n*b;

  (int n,int b)->123.0*n*b;

但是這樣寫是錯的:

(int n,b)->123.0*n*b;

先寫這些,剩下的等我看完書在寫。^_^

相關文章