• 极客专栏正式上线!欢迎访问 https://www.jikewenku.com/topic.html
  • 极客专栏正式上线!欢迎访问 https://www.jikewenku.com/topic.html

JDK8新特性之方法引用

技术杂谈 勤劳的小蚂蚁 4个月前 (01-22) 99次浏览 已收录 0个评论 扫描二维码


什么是方法引用

方法引用是只需要使用方法的名字,而具体调用交给函数式接口,需要和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. publicstaticUser create(Supplier<User> supplier){
  2.    return supplier.get();
  3. }
  4. publicstaticvoid updateUsername(User user){
  5.    user.setUsername(user.getUsername()+" updated.");
  6. }
  7. publicvoid updateAge(){
  8.    this.setAge(this.getAge()+10);
  9. }
  10. publicvoid changeAge(User user){
  11.    user.setAge(user.getAge()+10);
  12. }
方法引用测试:
  1. publicstaticvoid 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 =newUser();
  14.    list.forEach(user::changeAge);
  15.    list.forEach(System.out::println);
  16. }
  17. privatestaticList<User> initList(){
  18.    List<User> list =newArrayList<>();
  19.    list.add(newUser("oaby",23));
  20.    list.add(newUser("tom",11));
  21.    list.add(newUser("john",16));
  22.    list.add(newUser("jennis",26));
  23.    list.add(newUser("tin",26));
  24.    list.add(newUser("army",26));
  25.    list.add(newUser("mack",19));
  26.    list.add(newUser("jobs",65));
  27.    list.add(newUser("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都相应更新了。


丨极客文库, 版权所有丨如未注明 , 均为原创丨
本网站采用知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议进行授权
转载请注明原文链接:JDK8新特性之方法引用
喜欢 (0)
[247507792@qq.com]
分享 (0)
勤劳的小蚂蚁
关于作者:
温馨提示:本文来源于网络,转载文章皆标明了出处,如果您发现侵权文章,请及时向站长反馈删除。

您必须 登录 才能发表评论!

  • 精品技术教程
  • 编程资源分享
  • 问答交流社区
  • 极客文库知识库

客服QQ


QQ:2248886839


工作时间:09:00-23:00