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

......

相关推荐
咖啡啡不加糖12 分钟前
暴力破解漏洞与命令执行漏洞
java·后端·web安全
风象南15 分钟前
SpringBoot敏感配置项加密与解密实战
java·spring boot·后端
DKPT25 分钟前
Java享元模式实现方式与应用场景分析
java·笔记·学习·设计模式·享元模式
Percep_gan33 分钟前
idea的使用小技巧,个人向
java·ide·intellij-idea
缘来是庄33 分钟前
设计模式之迭代器模式
java·设计模式·迭代器模式
Humbunklung35 分钟前
Rust方法语法:赋予结构体行为的力量
开发语言·后端·rust
Liudef0640 分钟前
基于HTML与Java的简易在线会议系统实现
java·前端·html
萧曵 丶42 分钟前
Rust 内存结构:深入解析
开发语言·后端·rust
算法练习生1 小时前
Qt核心类QWidget及其派生类详解
开发语言·c++·qt
JosieBook1 小时前
【Java编程动手学】Java常用工具类
java·python·mysql