Java 8 中的一个新特性:方法引用(Method Reference)

本文介绍 Java 8 中的方法引用特性,它是 Lambda 表达式的快捷写法,可简化代码、提高可读性。方法引用分为静态方法引用、实例方法引用、对象方法引用和构造方法引用四种类型,文中给出了每种类型的语法和使用示例,展示了其优点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

方法引用(Method Reference)是 Java 8 中的一个新特性,它可以简化代码并提高可读性。方法引用可以看作是 Lambda 表达式的一种快捷写法,它可以直接引用已有方法或者构造方法,而不需要像 Lambda 表达式那样,重新定义一个方法体。

方法引用可以分为四种类型:

1. 静态方法引用
语法:ClassName::staticMethodName

例如:

IntFunction<String> intToString = Integer::toString;

这里将 Integer 类中的静态方法 toString() 引用为 intToString。

在例一中,intToString 是一个 IntFunction<String> 类型的对象,它将一个 Integer 类型的参数转换为 String 类型的结果。可以通过调用该对象的 apply() 方法来使用它。例如:

IntFunction<String> intToString = Integer::toString;
String str = intToString.apply(123); 
System.out.println(str); // 输出 "123"

这里将整数 123 作为参数传递给 intToString 对象的 apply() 方法,该方法将其转换为字符串类型并返回,然后将结果赋值给 str 变量并输出。

2. 实例方法引用
语法:instance::instanceMethodName

例如:

String str = "hello";
Function<Integer, Character> func = str::charAt;

这里将 String 类中的实例方法 charAt() 引用为 func。

在例二中,我们将 String 类中的实例方法 charAt() 引用为 func,即将 func 定义为一个 Function 对象,它接收一个 Integer 类型的参数,返回一个 Character 类型的结果,具体使用方法可以如下:

String str = "hello";
Function<Integer, Character> func = str::charAt;
Character result = func.apply(2); // 返回 'l'
System.out.println(result);

这里我们先定义了一个字符串 str,然后将实例方法 charAt() 引用为 func。接着我们调用 func 的 apply() 方法,传入参数 2,返回结果为 'l'。这样就可以简洁地获取字符串中指定位置的字符了。

3. 对象方法引用
语法:ClassName::instanceMethodName

例如:

BiPredicate<String, String> b = String::startsWith;

这里将 String 类中的实例方法 startsWith() 引用为 b。

在例三中,我们将 String 类中的实例方法 startsWith() 引用为 b,即将 b 定义为一个 BiPredicate 对象,它接收两个 String 类型的参数,返回一个 boolean 类型的结果,具体使用方法可以如下:

BiPredicate<String, String> b = String::startsWith;
boolean result = b.test("hello", "he"); // 返回 true
System.out.println(result);

这里我们先将实例方法 startsWith() 引用为 b。接着我们调用 b 的 test() 方法,传入两个字符串参数 "hello" 和 "he",返回结果为 true,因为 "hello" 以 "he" 开头。这样就可以简洁地判断一个字符串是否以指定的前缀开头了。

4. 构造方法引用
语法:ClassName::new

例如:

Supplier<List<String>> listSupplier = ArrayList::new;

这里将 ArrayList 的构造方法引用为 listSupplier。

方法引用的优点在于可以简化代码,并提高可读性和可维护性。在某些情况下,使用方法引用可以使代码更加简洁、清晰、易于理解和维护。

在例四中,我们将 ArrayList 的构造方法引用为 listSupplier,即将 listSupplier 定义为一个 Supplier 对象,它不接收任何参数,返回一个 List<String> 类型的结果,具体使用方法可以如下:

Supplier<List<String>> listSupplier = ArrayList::new;
List<String> list = listSupplier.get();
list.add("hello");
list.add("world");
System.out.println(list); // 输出 [hello, world]

这里我们先将 ArrayList 的构造方法引用为 listSupplier。接着我们调用 listSupplier 的 get() 方法,返回一个 ArrayList 对象。然后我们向 list 中添加两个字符串元素 "hello" 和 "world",最后打印出 list 的内容,输出为 [hello, world]。这样就可以简洁地创建一个 ArrayList 并向其中添加元素了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值