JDK8新特性之方法引用


什么是方法引用

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

本站所有文章均由网友分享,仅用于参考学习用,请勿直接转载,如有侵权,请联系网站客服删除相关文章。若由于商用引起版权纠纷,一切责任均由使用者承担
极客文库 » JDK8新特性之方法引用

Leave a Reply

欢迎加入「极客文库」,成为原创作者从这里开始!

立即加入 了解更多