天天看點

Lambda表達式

之後就可以開始使用Lambda表達式來編寫代碼了,比如說傳統情況下開啟一個子線程的寫法如下:

而使用Lambda表達式則可以這樣寫:

是不是很神奇呢?不光是從代碼的行數還是縮進結構上來看,Lambda表達式的寫法明顯要更加精簡。

那麼為什麼可以使用這麼神奇的寫法呢?這是因為Thread類的構造函數接受的參數是一個Runnable接口,并且該接口中有一個待實作的方法.我們檢視一下Runnable接口的源碼,如下所示:

凡是這種隻有一個待實作方法的接口,都可以使用Lambda表達式的寫法.比如說,通常建立一個類似于上述接口的匿名類實作需要這樣寫:

而有了Lamba表達式之後我們就可以這樣寫了:

了解了Lambda表達式的基本寫法,接下來我們嘗試自定義一個接口,然後使用Lambda表達式的方式進行實作。

建立一個MyListener接口,代碼如下所示:

MyListener接口中也隻有一個待實作方法,這和Runnable接口的結構是基本一緻的。唯一不同的是,MyListener中的doSomething()方法是有參數并且是有傳回值的,那麼我們就來看一看這種情況下該如何使用Lambda表達式進行實作

可以看到,doSomething()方法的參數直接寫在括号裡面就可以了,而傳回值仍然像往常一樣,寫在具體實作的最後一行即可。

另外,Java還可以根據上下文自動推斷出lambda表達式中的參數類型,是以上面的代碼也可以簡化成如下寫法

Java将會自動推斷出參數a是String類型,參數b是int類型,進而使我們的代碼變得更加精簡了。

接下來舉個具體的例子,比如說現在有一個方法是接受MyListener參數的,如下所示:

我們再調用hello()這個方法的時候就可以這樣寫:

那麼doSomething()方法就會将a和b兩個參數進行相加,進而最終的列印結果就會是”Hello Lambda1024”;