JDK8新特性之方法引用
转载自 JDK8新特性之方法引用
什么是方法引用
方法引用是只需要使用方法的名字,而具体调用交给函数式接口,需要和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都相应更新了。
JDK8新特性之方法引用相关推荐
- 【Java】JDK8新特性之方法引用
什么是方法引用 方法引用是只需要使用方法的名字,而具体调用交给函数式接口,需要和Lambda表达式配合使用. 如: List<String> list = Arrays.asList(&q ...
- 【java8新特性】——方法引用(四)
一.简介 方法引用是java8的新特性之一, 可以直接引用已有Java类或对象的方法或构造器.方法引用与lambda表达式结合使用,可以进一步简化代码. 来看一段简单代码: public static ...
- Jdk1.8新特性(三)——方法引用::
Lambda表达式可以用来创建匿名方法,有时候使用lambda表达式仅仅是调用一个已存在的方法: Arrays.sort(stringsArray,(s1,s2)->s1.compareToIg ...
- 切克闹!Java8新特性之方法引用
Java8 中引入方法引用新特性,用于简化应用对象方法的调用,方法引用是用来直接访问类或者实例的已经存在的方法或者构造方法.方法引用提供了一种引用而不执行方法的方式,它需要由兼容的函数式接口构成的目标 ...
- JDK 8 新特性 之 方法引用
概述 方法引用:当要传递给Lambda体的操作,已经有实现的方法了,就可以使用方法引用 方法引用:在Lambda的基础上进一步的简化.换句话说,方法引用就是Lambda表达式,也就是函数式接口的一个实 ...
- java8 构造函数引用_java8新特性之方法引用与构造器引用
方法引用与构造器引用 关于lambda表达式,我们已经知道了,一般是有两部分组成.箭头操作符(->)左侧是lambda体的参数列表,右侧是lambda体,而lambda体里面的操作,有些情况下可 ...
- Java8新特性 - 04 - 方法引用05 - 方式四 【类名::new】
1.类名::new 1.将Lambda表达式 替换为 [类名::new] 的写法. 2.确保 [类的构造方法] 的 参数与返回值 和 Lambda表达式的一致! * 分析 : 匿名内部类的方式 : 正 ...
- 小司机带你用Java8新特性之方法引用
基于网上千篇一律的xxx.forEach(System.out::println)示例,不利于初学者理解, 所以小编自己撸了两个示例: 以下代码: package com.demo.java8;pub ...
- java 7 异常新特性_Java7的异常处理新特性-addSuppressed()方法等
开发人员对异常处理的try-catch-finally语句块都比较熟悉.如果在try语句块中抛出了异常,在控制权转移到调用栈上一层代码之前,finally语句块中的语句也会执行.但是finally语句 ...
最新文章
- 在Yolov5 Yolov4 Yolov3 TensorRT 实现Implementation
- node搭建的一个应用在前端项目中的可切换接口的代理服务器
- Hubble.net 简介及与Lucene.net 对比测试
- python如何使用session和cookie_django进阶之cookie和session的使用示例
- keepalived实现Tomcat服务双机热备
- 视网膜脱落相关知识(持续更新中)
- WPF 操作 richTextBox
- 数学学习的心理——关于数学中的挫败的反思及若干启示
- Win10配置VSCode+Opencv3(C++) GCC环境
- VxWorks程序一下载就停住了
- 戴机械手表有哪些事情就不能做了?
- VirtualBox启动失败,The VM session was aborted.
- Java之数据库基础理论
- (转)FTP操作类,从FTP下载文件
- Restorator 导致win8或win8.1 打开程序提示不支持此接口的解决方法
- uni-app h5 上传图片 压缩图片
- 研发大局观(15.8.25 )
- stm32f4 ov7670 屏幕一直显示,OV7670 ERR 且MID(PID) 读出来是65535(0xffff)的解决办法
- 6.1神经网络--python机器学习
- jersey的使用总结
热门文章
- maskrcnn还可以加网络吗_绿茶加蜂蜜的功效,绿茶可以加蜂蜜吗?
- MySql :Could not create connection to database server.
- [JavaWeb-Bootstrap]Bootstrap快速入门
- [剑指offer]面试题18:树的子结构
- Pseudoprime numbers POJ - 3641(快速幂+判素数)
- 查询ecshop网站代码排查方法_提升网站访问速度,提升网站访问速度,提升网站访问速度的个人经验分享...
- 数据结构-查找-总结归纳知识点
- P1537 弹珠 背包可行性dp
- CF1526 D. Kill Anton
- 【AcWing 249. 蒲公英】