• JDK8新特性之方法引用


    什么是方法引用

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

    推荐阅读

    干货:2TB架构师四阶段视频教程

    面经:史上最全Java多线程面试题及答案

    面经:史上最全阿里高级Java面试题

    面经:史上最全Spring面试题

    教程:最全Spring Boot全套视频教程

    书籍:进阶Java架构师必看的15本书

    工具:推荐一款在线创作流程图、思维导图软件

    分享Java干货,高并发编程,热门技术教程,微服务及分布式技术,架构设计,区块链技术,人工智能,大数据,Java面试题,以及前沿热门资讯等。

  • 相关阅读:
    jQuery库冲突解决办法
    jquery源码 整体架构
    中文版Chrome浏览器不支持12px以下字体的解决方案
    html5 localStorage
    Git创建分支/GIT提交分支
    Git直接拉取远程分支
    vscode关闭后未打开上次界面的解决办法
    MAC升级nodejs和npm到最新版
    hadoop hue切换中文版
    Hdfs dfs命令使用
  • 原文地址:https://www.cnblogs.com/java-stack/p/11952547.html
Copyright © 2020-2023  润新知