查看原文
其他

JDK8新特性之方法引用

2017-10-04 javastack Java技术栈


什么是方法引用

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

如:

  1. List<String> list = Arrays.asList("a","b","c");

  2. list.forEach(str -> System.out.print(str));

  3. list.forEach(System.out::print);

上面两种写法是等价的。

方法引用分类

1、构造器方法引用

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

2、类静态方法引用

格式: Class::static_method

3、类普通方法引用

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

4、实例方法引用

格式: instance::method

示例

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

  1. public static User create(Supplier<User> supplier){

  2.    return supplier.get();

  3. }

  4. public static void updateUsername(User user){

  5.    user.setUsername(user.getUsername() + " updated.");

  6. }

  7. public void updateAge(){

  8.    this.setAge(this.getAge() + 10);

  9. }

  10. public void changeAge(User user){

  11.    user.setAge(user.getAge() + 10);

  12. }

方法引用测试:

  1. public static void main(String[] args) {

  2.    List<User> list = initList();

  3.    // 1、构造器方法引用

  4.    User newUser = User.create(User::new);

  5.    newUser.setAge(1);

  6.    newUser.setUsername("new");

  7.    System.out.println(newUser);

  8.    // 2、类静态方法引用

  9.    list.forEach(User::updateUsername);

  10.    // 3、类普通方法引用

  11.    list.forEach(User::updateAge);

  12.    // 4、实例方法引用

  13.    User user = new User();

  14.    list.forEach(user::changeAge);

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

  16. }

  17. private static List<User> initList() {

  18.    List<User> list = new ArrayList<>();

  19.    list.add(new User("oaby", 23));

  20.    list.add(new User("tom", 11));

  21.    list.add(new User("john", 16));

  22.    list.add(new User("jennis", 26));

  23.    list.add(new User("tin", 26));

  24.    list.add(new User("army", 26));

  25.    list.add(new User("mack", 19));

  26.    list.add(new User("jobs", 65));

  27.    list.add(new User("jordan", 23));

  28.    return list;

  29. }

输出结果:

  1. User [username=new, age=1]

  2. User [username=oaby updated., age=43]

  3. User [username=tom updated., age=31]

  4. User [username=john updated., age=36]

  5. User [username=jennis updated., age=46]

  6. User [username=tin updated., age=46]

  7. User [username=army updated., age=46]

  8. User [username=mack updated., age=39]

  9. User [username=jobs updated., age=85]

  10. 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不同环境配置


看完有没有收获?

分享到朋友圈给更多的人吧。




  Java技术栈  
微信公众号:「Javastack

分享Java干货,高并发编程,热门技术教程,微服务及分布式技术,架构设计,区块链技术,人工智能,大数据,Java面试题,以及前沿热门资讯等。


 ▼长按二维码关注我们↓↓↓




    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存