前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JDK8新特性之方法引用

JDK8新特性之方法引用

作者头像
Java技术栈
发布2018-03-30 14:47:48
5400
发布2018-03-30 14:47:48
举报
文章被收录于专栏:Java技术栈Java技术栈

什么是方法引用

方法引用是只需要使用方法的名字,而具体调用交给函数式接口,需要和Lambda表达式配合使用。

如:

代码语言:javascript
复制
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类添加方法引用方法:

代码语言:javascript
复制
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);
}

方法引用测试:

代码语言:javascript
复制
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;
}

输出结果:

代码语言:javascript
复制
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都相应更新了。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-10-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java技术栈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是方法引用
  • 方法引用分类
    • 1、构造器方法引用
      • 2、类静态方法引用
        • 3、类普通方法引用
          • 4、实例方法引用
          • 示例
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档