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

......

相关推荐
CoderYanger4 分钟前
递归、搜索与回溯-综合练习:28.不同路径Ⅲ
java·算法·leetcode·深度优先·1024程序员节
鱼丸花生4 分钟前
Java 数组详解
java
用户84913717547164 分钟前
Tomcat 为什么要“造反”?深度解析 Java 类加载机制的“守”与“破”
java·jvm
沐知全栈开发5 分钟前
jEasyUI 设置排序
开发语言
code bean5 分钟前
【C++ 】C++ 与 C#:using 关键字、命名空间及作用域解析符对比
开发语言·c++·c#
CAE虚拟与现实6 分钟前
C# 调用 DLL为什么不像 C/C++调用 DLL 时需要lib库
开发语言·c++·c#·动态链接库·dll库·lib库
Larry_Yanan7 分钟前
Qt线程使用(一)直接继承QThread类
开发语言·c++·qt·ui
vortex57 分钟前
Bash One-Liners 学习精要指南
开发语言·chrome·bash
jiayong2310 分钟前
Elasticsearch Java 开发完全指南
java·大数据·elasticsearch
321茄子12 分钟前
MySQL 事务隔离性及锁
java·数据库·mysql