Java 教程

Java 控制語句

面向物件程式設計

Java 內建類

Java 檔案處理

Java 錯誤和異常

Java 多執行緒

Java 同步

Java 網路

Java 集合

Java 介面

Java 資料結構

Java 集合演算法

高階 Java

Java 雜項

Java API 和框架

Java 類引用

Java 有用資源

Java - 方法引用



方法引用是在 Java 8 中引入的。方法引用是 lambda 表示式 的一種特殊型別。它透過提高可讀性和編寫簡潔的程式碼來滿足 lambda 表示式的目的。

方法引用適用於 函式式介面。無論何時,我們都使用 lambda 表示式呼叫函式式介面的方法,都可以使用方法引用。

方法引用有助於透過名稱指向方法,即使不指定引數。引數由 lambda 表示式傳遞。方法引用使用 "::" 符號描述。

Java 方法引用的型別

方法引用可以用於指向以下型別的方法:

  • 靜態方法

  • 例項方法

  • 使用 new 運算子的建構函式 (TreeSet::new)

靜態方法的方法引用

靜態 方法 可以輕鬆地使用 "::" 符號引用,而無需建立 的任何例項,並使用類名。

語法

<<class-name>>::methodName

示例:靜態方法的引用

在此示例中,我們引用了我們類的靜態方法以三種方式列印元素。第一種方法是使用 for 迴圈 列印元素的常規方法。第二種方法是在 for each 迴圈 中使用 lambda 表示式。第三種方法是在 for each 迴圈中使用方法引用來列印所有元素。

package com.tutorialspoint;

import java.util.ArrayList;
import java.util.List;

public class Tester {
   public static void main(String args[]) {
      List<String> names = new ArrayList<>();

      names.add("Mahesh");
      names.add("Suresh");
      names.add("Ramesh");
      names.add("Naresh");
      names.add("Kalpesh");

      System.out.println("Printing using for each loop");
      // Approach 1: for loop to print all elements
      for (String name: names) {
         System.out.println(name);
      }

      System.out.println("Printing using for each loop with lambda expression");
      // Approach 2: lambda expression to print the elements in for each loop
      names.forEach(s->System.out.println(s));

      System.out.println("Printing using for each loop with method reference" );
      // Approach 3: Method reference to print elements in for each loop
      names.forEach(System.out::println);
   }
}

輸出

讓我們編譯並執行上述程式,這將產生以下結果:

Printing using for each loop
Mahesh
Suresh
Ramesh
Naresh
Kalpesh
Printing using for each loop with lambda expression
Mahesh
Suresh
Ramesh
Naresh
Kalpesh
Printing using for each loop with method reference
Mahesh
Suresh
Ramesh
Naresh
Kalpesh

例項方法的方法引用

與靜態方法類似,我們可以使用方法引用引用物件的例項方法。

語法

<<object-name>>::methodName

示例:例項方法的引用

在此示例中,我們引用了 Integer 類的例項方法來比較元素,方法有兩種。第一種方法是使用帶有具有顯式方法呼叫的 lambda 表示式的 sorted 方法來常規比較元素。第二種方法是使用方法引用。

package com.tutorialspoint;

import java.util.Arrays;
import java.util.List;

public class Tester {
   public static void main(String args[]) {
      List<Integer> numbers = Arrays.asList(1,2,4,9,8,7,3);
      System.out.println("Sorted using lambda expression");
      numbers = numbers.stream().sorted((a,b) -> a.compareTo(b)).toList();

      System.out.println(numbers);

      numbers = Arrays.asList(1,2,4,9,8,7,3);
      System.out.println("Sorted using method reference" );
      numbers = numbers.stream().sorted(Integer::compareTo).toList();

      System.out.println(numbers);		
   }
}

輸出

讓我們編譯並執行上述程式,這將產生以下結果:

Sorted using lambda expression
[1, 2, 3, 4, 7, 8, 9]
Sorted using method reference
[1, 2, 3, 4, 7, 8, 9]

建構函式的方法引用

我們也可以使用方法引用來呼叫建構函式。這類似於靜態方法呼叫,但這裡我們使用 new 而不是方法名。

語法

<<class-name>>::new

示例:建構函式的引用

在此示例中,我們在迭代學生姓名列表時,根據學生的姓名建立 Student 類的新的物件。

package com.tutorialspoint;

import java.util.Arrays;
import java.util.List;

public class Tester {
   public static void main(String args[]) {
      List<String> studentNames = Arrays.asList("Mahesh","Suresh","Ramesh","Robert","Jon");

      // create the list of student objects from names
      Student[] students =  studentNames.stream().map(Student::new).toArray(Student[]::new);

      List<String> list = Arrays.asList(students);

      System.out.println(list);
   }
}

class Student{
   String name;
   Student(String name){
      this.name = name;
   }
   public String toString(){
      return this.name;
   }
}

輸出

讓我們編譯並執行上述程式,這將產生以下結果:

[Mahesh, Suresh, Ramesh, Robert, Jon]
廣告