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 方法引用 | 菜鸟教程

......

相关推荐
wuyk5551 小时前
104.C 语言字节对齐:从底层原理到工程实践的完整指南
c语言·开发语言·stm32·单片机·嵌入式硬件
ZYJCSZKJ1 小时前
基于地理位置围栏的短视频POI团购系统:LBS空间索引与流量分发实践
java·服务器·数据库
mldong7 小时前
引擎从不发一条消息:jeeflow 的两类扩展点与消息模块的分工
java·架构
君顾17 小时前
智慧零售实战指南:从技术架构到落地方案全解析
java·开发语言·零售
南棱笑笑生8 小时前
20260904实测给飞凌OK3576-C开发板刷入Rockchip原厂的IMG固件【使用飞凌的DTS】切换串口波特率为1.5Mbps
c语言·开发语言·rockchip
zhanghe6878 小时前
es的密码带有特殊字符,导出
java
平头哥技术团队8 小时前
Day 10 | 工欲善其事:VS Code 配置与项目归档
android·开发语言·前端·javascript·html·交互
pnoker8 小时前
IoT DC3 概念解读:把设备抽象成一套语义模板——位号、指令、事件与面向智能体的设备建模
java·人工智能·物联网·iot·dc3
乌萨奇也要立志学C++8 小时前
【洛谷】kmp算法
开发语言·算法
my_realmy8 小时前
Java SE 基础学习笔记(一):面向对象、继承多态、抽象接口与异常(JDK 8)
java·多线程·并发··生产者消费者模式