Java基础——java8+新特性——方法引用(::)

1. 什么是方法引用?

  • 定义 :Java 8 引入的语法糖,用于 简化 Lambda 表达式,直接引用已有的方法。

  • 符号 :使用 :: 双冒号操作符。

  • 本质:将方法作为函数式接口的实例传。

2. 方法引用的四种类型

类型 语法
静态方法引用 Class::static_method
特定对象的实例方法引用 Class::method
实例方法引用 instance::method
构造方法引用 Class::new

3.方法引用示例

java 复制代码
        //1.静态方法引用
        List<Integer> numbers = Arrays.asList(1, 3, 2, 5, 4);
        // 使用 Lambda 表达式
        Stream<Integer> sortedInLambda = numbers.stream().sorted((a, b) -> Integer.compare(a, b));
        System.out.println(sortedInLambda);
        // 使用方法引用
        Stream<Integer> sorted = numbers.stream().sorted(Integer::compare);
        System.out.println(sorted.collect(Collectors.toList()));  //[1, 2, 3, 4, 5]

        //2.特定对象的实例方法引用
        List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
        // 使用 Lambda 表达式
        names.forEach(s -> System.out.println(s));
        // 使用方法引用
        names.forEach(System.out::println);

        //4.构造方法引用
        // 使用 Lambda 表达式
        Supplier<List<String>> supplier1 = () -> new ArrayList<>();
        // 使用方法引用
        Supplier<List<String>> supplier2 = ArrayList::new;

3实例方法引用

java 复制代码
class Printer {
    // 实例方法
    public void printMessage(String message) {
        System.out.println(message);
    }
}

public class MethodReferenceExample {
    public static void main(String[] args) {
        Printer printer = new Printer();

        // 使用实例方法引用
        Runnable r = printer::printMessage;
        r.run();  // 输出 null,因为没有传递参数
    }
}

4. 方法引用的优势

  • 简化 Lambda 表达式,提升代码简洁性。

  • 直接引用已有方法,意图清晰,支持静态方法、实例方法、构造方法的引用。

  • 与函数式接口(如 ConsumerSupplier)紧密结合。

  • 合理使用可提升代码的可维护性和可读性。

5.参考

Java 8 方法引用 | 菜鸟教程

......

相关推荐
程序员欣宸21 分钟前
LangChain4j实战之十三:函数调用,低级API版本
java·人工智能·ai·langchain4j
charlie11451419122 分钟前
从 0 开始的机器学习——NumPy 线性代数部分
开发语言·人工智能·学习·线性代数·算法·机器学习·numpy
Java新手村24 分钟前
【订单超时取消怎么设计】
java
catchadmin1 小时前
Laravel12 + Vue3 的免费可商用商业级管理后台 CatchAdmin V5 正式发布
开发语言·php
袁气满满~_~1 小时前
Python数据分析学习
开发语言·笔记·python·学习
阿蒙Amon1 小时前
C#每日面试题-常量和只读变量的区别
java·面试·c#
寻星探路2 小时前
【算法专题】滑动窗口:从“无重复字符”到“字母异位词”的深度剖析
java·开发语言·c++·人工智能·python·算法·ai
程序员小白条2 小时前
面试 Java 基础八股文十问十答第八期
java·开发语言·数据库·spring·面试·职场和发展·毕设
Dxy12393102162 小时前
python连接minio报错:‘SSL routines‘, ‘ssl3_get_record‘, ‘wrong version number‘
开发语言·python·ssl
大王小生2 小时前
C# CancellationToken
开发语言·c#·token·cancellation