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

......

相关推荐
nongcunqq5 分钟前
abap 操作 excel
java·数据库·excel
R-G-B1 小时前
【02】C#入门到精通——C# 变量、输入/输出、类型转换
开发语言·c#·c# 变量·c#输入/输出·c#类型转换
星河队长1 小时前
C# 软件加密方法,有使用时间限制,同时要防止拷贝
开发语言·c#
史迪奇_xxx1 小时前
10、一个简易 vector:C++ 模板与 STL
java·开发语言·c++
2301_801252221 小时前
Java中的反射
java·开发语言
Kiri霧1 小时前
Rust开发环境搭建
开发语言·后端·rust
weixin-a153003083162 小时前
[数据抓取-1]beautifulsoup
开发语言·python·beautifulsoup
遇印记2 小时前
大二java学习笔记:二维数组
java·笔记·学习
小杨同学yx2 小时前
有关maven的一些知识点
java·开发语言
小韩博2 小时前
IDEA的简单使用
java·ide·intellij-idea