Java8 新特性--方法引用

什么是方法引用

方法引用是只需要使用方法的名字,而具体调用交给函数式接口,需要和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都相应更新了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值