美文网首页
JDK8新特性 方法引用

JDK8新特性 方法引用

作者: 牧心musing | 来源:发表于2021-02-24 19:12 被阅读0次

    1. Lambda的冗余场景

    image.png

    首先可以直接调用getSum方法就可以完成这个操作了。


    image.png

    而方法引用更简洁


    image.png
    其实方法引用就是让这个指定的方法去重写接口的抽象方法,到时候调用接口的抽象方法,就是去调用传递过去的这个方法。

    如果lambda所要实现的方案,已经有其他方法存在相同方案,那么就可以使用方法引用

    2. 常见引用方式

    1. instanceName::methodName 对象::方法名
    2. ClassName::staticMethodName 类名::静态方法
    3. ClassName::methodName 类名::普通方法
    4. ClassName::new 类名::new调用的构造器
    5. TypeName[]::new 调用某种数据格式的构造器
    Function<String, Integer> f = (String str) -> {
        return str.length();  
    };
    --------------上面和下面两种写法是等价的!-------------------------
    Function<String, Integer> f = String::length;
    
    ======================================================================
        
    // 前面两个泛型是参数的类型,第三个泛型是返回值的类型
    BiFunction<String, Integer, String> f = (String str, Integer index) -> {
        return str.substring(index);  
    };
    --------------上面和下面两种写法是等价的!-------------------------
    BiFunction<String, Integer, String> f = String::substring;
    

    方法引用的两个注意事项:

    • 被引用的方法,参数要和接口中抽象方法的参数一样,
    如Supplier<Long> s = now::getTime,now.getTime()没有参数,
    Supplier接口的抽象方法get()也没有参数
    • 当接口抽象方法有返回值时,被引用的方法也必须有返回值

    相关文章

      网友评论

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

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