JDK8新特性之方法引用

简介: 什么是方法引用方法引用是只需要使用方法的名字,而具体调用交给函数式接口,需要和Lambda表达式配合使用。如:List list = Arrays.asList("a","b","c");list.forEach(str -> System.out.print(str));list.forEach(System.out::print);上面两种写法是等价的。

什么是方法引用

方法引用是只需要使用方法的名字,而具体调用交给函数式接口,需要和Lambda表达式配合使用。

如:

List<String> list = Arrays.asList("a","b","c");
list.forEach(str -> System.out.print(str));
list.forEach(System.out::print);

上面两种写法是等价的。

方法引用分类

1、构造器方法引用

格式:Class::new,调用默认构造器。

2、类静态方法引用

格式:Class::static_method

3、类普通方法引用

格式:Class::method,方法不能带参数。

4、实例方法引用

格式:instance::method

示例

往User类添加方法引用方法:

public static User create(Supplier<User> supplier){
    return supplier.get();
}

public static void updateUsername(User user){
    user.setUsername(user.getUsername() + " updated.");
}

public void updateAge(){
    this.setAge(this.getAge() + 10);
}

public void changeAge(User user){
    user.setAge(user.getAge() + 10);
}

方法引用测试:

public static void main(String[] args) {
    List<User> list = initList();

    // 1、构造器方法引用
    User newUser = User.create(User::new);
    newUser.setAge(1);
    newUser.setUsername("new");
    System.out.println(newUser);

    // 2、类静态方法引用
    list.forEach(User::updateUsername);

    // 3、类普通方法引用
    list.forEach(User::updateAge);

    // 4、实例方法引用
    User user = new User();
    list.forEach(user::changeAge);

    list.forEach(System.out::println);
}

private static List<User> initList() {
    List<User> list = new ArrayList<>();
    list.add(new User("oaby", 23));
    list.add(new User("tom", 11));
    list.add(new User("john", 16));
    list.add(new User("jennis", 26));
    list.add(new User("tin", 26));
    list.add(new User("army", 26));
    list.add(new User("mack", 19));
    list.add(new User("jobs", 65));
    list.add(new User("jordan", 23));
    return list;
}

输出结果:

User [username=new, age=1]
User [username=oaby updated., age=43]
User [username=tom updated., age=31]
User [username=john updated., age=36]
User [username=jennis updated., age=46]
User [username=tin updated., age=46]
User [username=army updated., age=46]
User [username=mack updated., age=39]
User [username=jobs updated., age=85]
User [username=jordan updated., age=43]

可以看出方法引用都生效了,username和age都相应更新了。

推荐阅读

什么是Spring Boot?
Spring Boot开启的2种方式
Spring Boot Starters启动器
Spring Boot定制启动图案
Spring Boot核心配置
Spring Boot功能实战
Spring Boot自动配置原理、实战
Spring Boot Runner启动器
Spring Boot - Profile不同环境配置

看完有没有收获?分享到朋友圈给更多的人吧。

相关文章
|
2月前
|
安全 JavaScript 前端开发
JDK1.8的重要的新特性与功能
Java Development Kit (JDK) 1.8,也称为Java 8,是Java平台的一个重大更新,于2014年3月发布。它引入了多项新特性、新的API和性能提升
76 3
|
3月前
|
监控 安全 Java
探索Java的未来:JDK 18新特性全览
探索Java的未来:JDK 18新特性全览
80 0
|
3月前
|
缓存 安全 Java
JDK 14全景透视:每个Java开发者必知的新特性
JDK 14全景透视:每个Java开发者必知的新特性
55 0
|
8天前
|
算法 Java 编译器
升级指南之JDK 11+ 新特性和AJDK
本文详细介绍了JDK个版本之间的特性、区别以及JDK版本更迭时优化了哪些地方,对JDK的版本选择给出了建议,以及升级教程。
|
14天前
|
存储 安全 Java
JDK22发布了!来看看有哪些新特性
以上是介绍 JDK22新特性的全部内容了,突然V哥想要感慨一下,技术之路,学无止境,选择 IT 技术,作个纯粹的人,享受研究技术的过程,这种带来的快感,也许只有真正热爱编程的人才能有体会。
|
2月前
|
编解码 Java API
集合在JDK9中的新特性
集合在JDK9中的新特性
|
2月前
|
Java
JDK8新特性--lambda表达式
面向对象思想强调:必须通过对象的形式来做事情
JDK8新特性--lambda表达式
|
2月前
|
SQL Java API
浅析jdk8所包含的主要特性
浅析jdk8所包含的主要特性
|
3月前
|
前端开发 IDE Java
JDK 新特性学习笔记之模块系统
JDK 新特性学习笔记之模块系统
|
3月前
|
安全 网络协议 Java
JDK 16全览:改变游戏规则的新特性
JDK 16全览:改变游戏规则的新特性
44 0