JDK8新特性 方法引用

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()也没有参数
• 当接口抽象方法有返回值时,被引用的方法也必须有返回值

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 为什么要学Java8 Java8让你的编程变得更容易 充分稳定的利用计算机硬件资源 Lambda lambda 是...
    李庆雪阅读 4,565评论 0 5
  • 简介 1.速度更快2.代码更少(Lambda表达式)3.强大的Stream API4.便于并行5.最大化减少空指针...
    是小猪童鞋啦阅读 474评论 0 0
  • 基础语法 Lambda需要函数式接口支持 接口用@Functiona1Interface修饰,就是函数式接口 La...
    小草丶body阅读 525评论 0 0
  • 方法引用通过方法的名字来指向一个方法。方法引用使用一对冒号 ::。方法引用使得开发者可以直接引用现存的方法、Jav...
    网恋被骗600万阅读 410评论 0 0
  • java8新特性学习 java8的特点 速度更快(修改了HasMap、HasSet、CurrentHasMap等存...
    ZGYSYY阅读 944评论 0 0