美文网首页Java高级技术
JDK8新特性之方法引用

JDK8新特性之方法引用

作者: Java技术栈 | 来源:发表于2017-10-09 09:01 被阅读0次

    什么是方法引用

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


    更多干货推荐

    1.史上最强 Java 中高级面试题整理

    2.史上最强 Spring Boot & Cloud 教程整理

    3.史上最强架构设计分布式技术干货整理

    给大家送福利了,扫码关注Java技术栈微信公众号,在后台回复:666,可免费获取我最新整理的架构师学习资料,都是个人收藏学习的。

    扫码关注Java技术栈微信公众号

    相关文章

      网友评论

        本文标题:JDK8新特性之方法引用

        本文链接:https://www.haomeiwen.com/subject/naggextx.html