2013-08-05 12 views

回答

5

你在問Java 8中的lambdas嗎?

Java 8 lambda是對匿名類的子集的簡化 - 即擴展了「功能接口」的匿名類,並且只有一個方法,不使用this,不使用初始化塊,並且具有沒有領域。 (但是,這是匿名類的一個非常常見的用例。)

換句話說,任何lambda表達式都可以重寫成一個等效的匿名類創建表達式。但是隻有一些(不是全部)匿名類創建表達式可以重寫爲lambda表達式。

+0

'this'引用仍然可以在lambda中使用,但是它引用類lambda表達式駐留的實例。與匿名類不同,沒有新的對象被創建(不是語義上的),其中'this'指的是新對象,所以'this'指向lambda之外的this。這意味着你不能在靜態函數中創建的lambda中使用'this',因爲沒有'this'來引用。 –

+0

準確地說,「確切地說一種方法」並不準確 - 「確切地說,一種抽象方法」會更精確,但最準確的將是「確切地說,一種未在對象中聲明的抽象方法」是最準確的。 –