JDK8新特性之方法引用
2024-10-07 20:19:41
什么是方法引用
方法引用是只需要使用方法的名字,而具体调用交给函数式接口,需要和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都相应更新了。
推荐阅读
分享Java干货,高并发编程,热门技术教程,微服务及分布式技术,架构设计,区块链技术,人工智能,大数据,Java面试题,以及前沿热门资讯等。
最新文章
- 网页中插入外部视频的几种方法(PC与手机网页通用)
- HTML基础语句
- StringEscapeUtils的使用
- (2018干货系列二)最新HTML5学习路线整合
- appium + java + WebDriverAgent实现IOS app启动
- 通过uwsgi+nginx启动flask的python web程序
- Django中的视图
- OAuth2.0的理解&;基础
- OpenGL笔记(三) GLSL语法与内建函数
- Linux下RTL-SDR基础环境安装
- Linux多线程--使用互斥量同步线程【转】
- spring PROPAGATION
- 对抗样本攻防战,清华大学TSAIL团队再获CAAD攻防赛第一
- Hibernate 的Ehache学习
- 转码:gcc在代码中禁止某些warning
- MUI框架-01-介绍-创建项目-简单页面
- Memcached gets 命令
- 修改阿里云ECS服务器的系统时区
- 合并两个数组 以KEY 作为键
- day 4 集合
热门文章
- 《Hadoop学习之路》学习实践二——配置idea远程调试hadoop
- selinux与kernel 0day
- Java原理领悟-JMM(java内存模型认知)
- vue做一个上移和下移,删除的li 功能
- bzoj4544 椭圆上的整点
- Spring Boot 中 @SpringBootApplication注解背后的三体结构探秘
- myeclipse中使用maven插件的时候,报错-Dmaven.multiModuleProjectDirectory system propery is not set.
- ARM 汇编与C之间 的调用
- Red Hat 操作系统 rpm 卸载软件提示";error: %preun( ) scriptlet failed, exit status 1";
- 注册Bean