JDK8方法引用和构造函数引用

  • 以前⽅法调⽤ 对象.⽅法名 或者 类名.⽅法名
  • jdk1.8提供了另外⼀种调⽤⽅式 ::
说明:⽅法引⽤是⼀种更简洁易懂的lambda表达式,操作符是双冒号::,⽤来直接访问类或者实例
已经存在的⽅法或构造⽅法
通过⽅法引⽤,可以将⽅法的引⽤赋值给⼀个变量
语法:左边是容器(可以是类名,实例名),中间是" :: ",右边是相应的⽅法名
静态⽅法,则是ClassName::methodName。如 Object ::equals
实例⽅法,则是Instance::methodName
构造函数,则是 类名::new;
单个参数
Function<⼊参1, 返回类型> func = ⽅法引⽤
应⽤ func.apply(⼊参);
2个参数
BiFunction<⼊参1,⼊参2, 返回类型> func = ⽅法引⽤
应⽤ func.apply(⼊参1,⼊参2);
  • 示例
public class TestJdk8 {
public static void main(String[] args) {
 // 使⽤双冒号::来构造静态函数引⽤
 Function<String, Integer> fun = Integer::parseInt;
 Integer value = fun.apply("1024");
 System.out.println(value);
 // 使⽤双冒号::来构造⾮静态函数引⽤
 String content = "欢迎来到⼩滴课堂学习";
 Function<Integer, String> func = content::substring;
 String result = func.apply(1);
 System.out.println(result);
 // 构造函数引⽤,多个参数
 BiFunction<String, Integer, User> biFunction = User::new;
 User user1 = biFunction.apply("⼩滴课堂", 28);
 System.out.println(user1.toString());
 //构造函数引⽤,单个参数
 Function<String, User> function = User::new;
 User user2 = function.apply("⼩D");
 System.out.println(user2.toString());
 // 函数引⽤也是⼀种函数式接⼝,可以将函数引⽤作为⽅法的参数
 sayHello(String::toUpperCase, "xdclass.net");
}
/**
 *
 * @param func 函数引⽤
 * @param param 对应的参数
 */
 private static void sayHello(Function<String, String> func, String
param) {
 String result = func.apply(param);
 System.out.println(result);
 }
}

class User {
 private String username;
 private Integer age;
 public User() {
 
 }
 public User(String username) {
 this.username = username;
 }
 public User(String username, Integer age) {
 this.username = username;
 this.age = age;
 }
 }

方法引用JDK 8 中引入的一种便捷的语法,用于简化函数式接口的实现。方法引用允许我们直接引用已存在的方法,而不需要像 Lambda 表达式那样重新实现一个方法体。方法引用的底层原理可以简单描述如下: 在 Java 中,每个方法都对应一个方法描述符(Method Descriptor),它包含了方法的参数类型和返回类型。方法引用通过使用方法描述符来指向已经存在的方法。 当我们使用方法引用时,编译器会根据上下文和目标类型来推断出我们想要引用方法。有多种方法引用的形式,如静态方法引用、实例方法引用构造函数引用等。 静态方法引用通过类名和方法名来进行引用,例如 `ClassName::staticMethodName`。它与调用静态方法的语法类似,只是没有括号和参数列表。 实例方法引用通过对象名(或表达式)和方法名来进行引用,例如 `objectName::instanceMethodName`。它类似于调用实例方法的语法,只是没有括号和参数列表。 构造函数引用通过类名和 `new` 关键字来进行引用,例如 `ClassName::new`。它可以用于创建一个类的实例。 当编译器进行方法引用的解析时,会根据目标类型和参数列表来匹配合适的方法,并生成相应的字节码。这样可以减少代码的冗余,提高代码的可读性和简洁性。 总而言之,方法引用是一种简化函数式接口实现的语法,它通过使用方法描述符来指向已经存在的方法,从而减少代码的重复编写。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ITzhongzi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值