jdk8 方法引用 lambda 匿名內部類

2021-09-04 17:13:39 字數 1063 閱讀 4393

匿名內部類、lambda和方法引用其實是相通的,從匿名內部類到lambda到方法引用是乙個進化的過程,是乙個簡化的過程,更加是乙個從抽象的過程。作用都是實現介面方法,換句話說就是實現介面;只是這個介面只有乙個抽象方法。

匿名內部類省去了實現類,直接new 介面名() 沒有實現類名,實際就是實現且建立了乙個介面物件。

lambda表示式省去了new 介面名;簡化為() -> 實際也是實現且建立乙個介面物件。乙個方法的引數括號中是否可以使用lambda表示式,取決於這個方法的引數型別:是否是乙個函式式介面(只有乙個抽象方法可以有多個default方法的介面),構造方法也同理。

方法引用省去了lambda,將介面方法實現的內容封裝到具體方法,將方法作為介面實現,實際也是實現且建立乙個介面物件。只是更加抽象,只能看到介面方法內部實現(呼叫的這個方法就是具體實現)。

上**:

import org.junit.test;

public class t01 很明顯是乙個靜態方法引用。

//靜態方法引用:exec()如果有引數(實際是accept()有引數)會把引數當方法rec()的實參;

//rec()中的引數就是accept()傳遞過去的;rec和accept要麼都有引數,要麼都沒有引數,

//如果rec沒有引數accept有引數或者rec有引數accept沒有引數,那麼方法引用都會語法錯誤

//2、lambda表示式

exec(s->);//void accept(string s); lambda表示式引數和抽象方法引數相對應

//3、匿名內部類

exec(new interf()

});//4、構造方法

interf interf = (s)->{};//本質上和exec(s->);是一樣的,()->{}本身就是帶實現的物件;

//相當於new乙個物件,不同點只是將物件賦給了變數。而非當做方法引數傳遞。

}public void exec(interf interf)

public static void rec(string s)

}inte***ce interf

jdk8 方法引用

方法引用的形式 方法引用的標準形式是 類名 方法名。注意 只需要寫方法名,不需要寫括號 有以下四種形式的方法引用 型別 示例 引用靜態方法 containingclass staticmethodname 引用某個物件的例項方法 containingobject instancemethodname...

jdk8 之方法引用

方法引用 實際上是lamda函式的語法糖 有時候並不適用 我們可以講方法引用看做乙個函式指標.function pointer 方法引用分為4類 類名 靜態方法名 建立乙個類 public class student public void setname string name public in...

jdk8 方法引用 或者說雙冒號

還是本著先學習的態度看看這個特性長什麼樣。然後看看到底代表了什麼。一般用在什麼地方。第一種 static方法的引用 就是你如果有個類有個靜態方法。你可以直接寫 containingclass staticmethodname 但是我有個疑問。這麼寫了之後。這個整體表示的是啥。如果照以前contain...