Java筆記:方法引用

山上下了雪-bky發表於2024-03-04

Java中的方法引用與Lambda表示式一樣,同樣式函數語言程式設計的一種體現,允許將方法作為引數傳遞給另一個方法,區別於Lambda表示式需要在傳遞的時候進行定義,方法引用必須是物件已經存在的實現好的方法,從而進一步簡化函數語言程式設計的程式碼。

語法:

類名::靜態方法名
物件名::例項方法名

示例:

List<String> names = Arrays.asList("zhangsan", "lisi", "wangwu");
// 使用::方法引用的方式將方法作為引數傳入另一個方法
names.forEach(System.out::println);

函式式介面: 同Lambda表示式一樣,方法引用同樣只能用於函式式介面(只有一個抽象方法的介面),即將另一個已實現的方法作為該介面抽象方法的實現。需要注意的是,方法引用的引數列表需要和介面中抽象方法的引數定義一致。

示例:由於自定義的IntegerUtil.myCmp方法與Collections.sort方法引數中要求的Comparable介面的compare抽象方法引數列表一致,所以可以直接使用方法引用。

public class IntegerUtil {
    // 該方法的引數列表與Comparable介面的compare方法引數列表一致
    public static int myCmp(Integer int1, Integer int2) {
        return int1.compareTo(int2);
    }
}
public class Main {
    public static void main(String[] args) {
        List<Integer> nums = Arrays.asList(33, 22, 11);
        // 只要方法引用的方法與介面中抽象方法的引數列表一致,就可以直接方法引用
        Collections.sort(nums, IntegerUtil::myCmp);
        // 輸出:[11, 22, 33]
        System.out.println(nums);
    }
}

引用類的例項方法: 例如使用Lambda表示式 (var1, var2, var3) -> var1.func(var2, var3) ,採用方法引用則寫為 var1.className::func ,示例如下:

List<Integer> nums = Arrays.asList(33, 22, 11);
// Lambda表示式寫法:Collections.sort(nums, (num1, num2) -> num1.compareTo(num2));
Collections.sort(nums, Integer::compareTo);

相關文章