JAVA8新特性(三)——方法引用
我們之前寫Lambda表示式,如果Lambda表示式有對應方法,我們可以直接引用方法作為Lambda表示式。這種做法叫做方法引用。方法引用用”::”分隔。
例子
@Test public void methodRefTest() { MethodReference.Class1 class1 = new MethodReference.Class1(); double result = doubleUnatuOperator(4.5, class1::return1); System.out.println("result:" + result); } public double doubleUnatuOperator(double num, DoubleUnaryOperator doubleUnaryOperator) { return doubleUnaryOperator.applyAsDouble(num); } static class Class1 { public double return1(double i) { return 1 + i; } }
這裡doubleSupplier的表示式呼叫Class1.return1方法,就可以使用方法引用。
方法引用有四種
引用靜態方法
ContainingClass::staticMethodName
例子: String::valueOf,對應的Lambda:(s) -> String.valueOf(s)
比較容易理解,和靜態方法呼叫相比,只是把.換為::
引用特定物件的例項方法
containingObject::instanceMethodName
例子: x::toString,對應的Lambda:() -> this.toString()
與引用靜態方法相比,都換為例項的而已
引用建構函式
ClassName::new
例子: String::new,對應的Lambda:() -> new String()
建構函式本質上是靜態方法,只是方法名字比較特殊。
引用特定型別的任意物件的例項方法
這個不清楚
例子
public class MethodReference { @Test public void staticMethodRefTest() { double result = doubleUnatuOperator(4.5, Class1::staticReturn1); System.out.println("result:" + result); } @Test public void methodRefTest() { MethodReference.Class1 class1 = new MethodReference.Class1(); double result = doubleUnatuOperator(4.5, class1::return1); System.out.println("result:" + result); } @Test public void constructorRefTest() { Class1 class1 = supplier(Class1::new); System.out.println(class1); } @Test public void ContainingTypeRefTest() { String[] stringArray = {"Barbara", "James", "Mary", "John", "Patricia", "Robert", "Michael", "Linda"}; Arrays.sort(stringArray, (a, b) -> { return a.compareToIgnoreCase(b); }); System.out.println(Arrays.toString(stringArray)); Arrays.sort(stringArray, String::compareToIgnoreCase); System.out.println(Arrays.toString(stringArray)); } public static double doubleUnatuOperator(double num, DoubleUnaryOperator doubleUnaryOperator) { return doubleUnaryOperator.applyAsDouble(num); } public Object unaryOperator(Object t,UnaryOperator<Object> operator) { return operator.apply(t); } public Class1 supplier(Supplier<Class1> supplier) { return supplier.get(); } static class Class1 { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public Class1() { } public Class1(String name) { System.out.println(name + "構造成功"); } public double return1(double i) { return 1 + i; } public static double staticReturn1(double i) { return i + 1; } public double add(Class1 a) { return 12.0; } @Override public String toString() { return "Class1{" + "name='" + name + '\'' + '}'; } } }
相關推薦
JAVA8新特性(三)——方法引用
我們之前寫Lambda表示式,如果Lambda表示式有對應方法,我們可以直接引用方法作為Lambda表示式。這種做法叫做方法引用。方法引用用”::”分隔。 例子 @Test public void methodRefTest() { MethodReference.
2020了你還不會Java8新特性?方法引用詳解及Stream 流介紹和操作方式詳解(三)
方法引用詳解 方法引用: method reference 方法引用實際上是Lambda表示式的一種語法糖 我們可以將方法引用看作是一個「函式指標」,function pointer 方法引用共分為4類: 類名::靜態方法名 引用名(物件名)::例項方法名 類名::例項方法名 (比較不好理解,個地方呼叫的方
java8 新特性值方法引用(::)
java8中的方法引用(雙冒號)::是類似於C++的域運算子,獲取方法使用的。 使用場景:cars.forEach( Car::repair ); 1、構造方法引用(Class::new): 相當於建立物件;如果函式式介面方法有引數,會匹配具體有
JAVA8新特性之方法引用與構造器引用
一:簡介 1:什麼是方法引用? 若Lambda體中的功能,已經有方法提供了實現,可以使用方法引用。 可以將方法引用理解為Lambda表示式的另一種表現形式。 2:方法
java8新特性(方法引用、構造器引用)
前言: 接上一篇文章:Java8新特性(內建的核心函式式介面)http://blog.csdn.net/xinghuo0007/article/details/78603908 我們知道使用了L
Java8新特性之方法引用
# 一 前言 日常開發中,經常使用到Lambda表示式,例如: ```java public static void main(String[] args) { List list = Arrays.asList(1, 5, 10, 4, 2); // 列印列表中的每一個數字 li
java8新特性-預設方法
作為一個java程式猿,經常會被問基礎怎麼樣,對於這個問題,我理解的有兩方面:一是對於java基礎的理解和掌握,比如JDK的相關特性;二是工作的經歷,畢竟,語言程式設計是一門實戰性質的藝術,就算掌握了千萬理論,編寫不出實際的程式碼,等於扯淡。而且,隨著技術的革新,很多東西都不再是一成不變的,還記得剛出校門那會
JDK8新特性04 方法引用與構造器引用
def 形式 com 理解 nts hello 數列 getname println import java.io.PrintStream; import java.util.Comparator; import java.util.function.*; /**
java 8新特性之方法引用
方法引用通過方法的名字來指向一個方法。 方法引用可以使語言的構造更緊湊簡潔,減少冗餘程式碼。 方法引用使用一對冒號 :: 。 下面,我們在 Car 類中定義了 4 個方法作為例子來區分 Java 中 4 種不同方法的引用。 public class Car {
Java8 新特性(三) - 日期時間物件以及一些其他特性
日期時間物件 關於日期時間的操作可以分為兩種: 轉換:與字串的互相轉換,與時間戳的互相轉換 計算:計算兩個時間點之間的間隔、時間點與時間段的計算(計算下週N、下個月D日、去年M月D日等等) Java8 提供了三個類:LocalDate、LocalTime、LocalDateTime,它們的形式如 2020
Java8新特性(三)方法引用、構造器引用、陣列引用
目錄: 1、方法引用 1.1、物件 :: 例項方法 1.2、類 :: 靜態方法 1.3、類 ::例項方法 2、構造器引用 2.1、介紹 2.2、使用 3、陣列引用 3.1、介紹 3.2、使用 1、方法引用 若lambda體中的內容有方法已經實現了,
java8新特性-方法引用
show acc 函數式 類名 抽象方法 bip pub 構造 -- 方法引用:若 Lambda 體中的功能,已經有方法提供了實現,可以使用方法引用 (可以將方法引用理解為 Lambda 表達式的另外一種表現形式) 1. 對象的引用 :: 實例方法名2. 類
Java8新特性整理之方法引用
Java8新特性整理之方法引用 方法引用語法 目標引用 ::方法的名稱 1 例子 擷取字串的Lambda表示式 (str, i) -> str.substring(i) 1 等效的方法引用 String::substring
JAVA8新特性-Lambda表示式、函式式介面以及方法引用
一、Lembda表示式 關於Lambda表示式,首先我們要知道Lambda表示式是什麼?為什麼要用?在什麼情況下要用? what:Lambda 是一個匿名函式,我們可以把 Lambda 表示式理解為是一段可以傳遞的程式碼(將程式碼 像資料一樣進行傳遞)。 why:可以寫
Java8新特性(二)方法引用
方法引用 方法引用其實就是Lambda表示式的簡寫,標誌是 :: 1、和Lambda表示式比較 public class Java8Test { public s
Java8新特性整理之方法引用(二)
方法引用語法 目標引用 ::方法的名稱 例子 擷取字串的Lambda表示式 (str, i) -> str.substring(i) 等效的方法引用 String::
JAVA8新特性--方法引用
方法引用是什麼? w3c教程上這樣解釋:方法引用通過方法的名字來指向一個方法。反正這句話我是看不明白啥意思,結合下面的要介紹的例子我認為這樣解釋更通俗易懂(瞭解方法引用前,建議先了解下Lambda表示式,請戳:Lambda表示式):方法引用就是一個特殊的Lam
Java8新特性之二:方法引用
輸出結果 知識 public ava urn strong class rules ros 上一節介紹了Java8新特性中的Lambda表達式,本小節繼續講解Java8的新特性之二:方法引用。方法引用其實也離不開Lambda表達式。 1、方法引用的使用場景 我們
Java8新特性:接口的默認方法與接口的靜態方法
err 類比 urn 多態 class 數組保存 統一 body bstr 接口的定義 接口的作用是定義該類型的實例要具有的功能,也就是必須執行哪些工作,並且不需要關心這些工作是怎麽具體進行的。接口定義的方法沒有方法體,並且接口不允許定義實例變量。如果一個類實現了這個接口就
JDK8新特性,方法的引用
技術分享 main 圖片 new cto ger ons alt 標識 引用方法並運行 在Java中,方法和構造方法都看作是對象的一種,那麽你要引用它(不是調用),則可以用::來引用。用來存儲這個引用的類型用@FunctionlaInterface註解來標識。 示例: p