基本的函数式接口:
消费类型 | Consumer<T> | void accept(T t) |
生产类型 | Supplier<T> | T get() |
转换类型 | Function<T, R> | R apply(T t) |
判断类型 | Predicate<T> | boolean test(T t) |
========================================================================
Lambda表达式中的方法引用是为了满足在一些特定情况下,对能够进行省略书写的lambda表达式书写更加省略以及紧凑,从而诞生的一种语法糖写法;
方法引用的分类:
分类 | 书写格式 |
实例方法引用 | 对象::实例方法 |
静态方法引用 | 类名::静态方法 |
特殊方法引用 | 类名::实例方法 |
构造方法引用 | 类名::new |
数组引用 | 数组类型::new |
首先:不论使用哪种方法引用【终极省略写法】,必须满足以下条件
1.方法体中只使用了一个其他的方法。
2.抽象方法实现的返回值和抽象方法返回值必须一样。【重要】
--------------------------------------------------------------------------------------------------------------------------------
实例方法引用: 【对象 :: 实例方法】
静态方法引用:【类名 :: 静态方法】(可以和实例方法引用看作一类)
特殊方法引用: 【类名 :: 实例方法】【比较特殊】
构造方法引用:【类名::new】
数组引用: 【数组类型::new】
小技巧:
(aaa)-> 方法体(aaa)
如果Lambda表达式中出现前后参数一样,或者都不写。可以留意下是否可改写方法引用!
总结:
1.方法引用只是在函数式接口在特定情况下满足省略条件,从而书写简单优雅的代码。
2.方法引用的使用较局限,原因是必须要符合一系列苛刻的条件。且会让代码可读性变差。
3.使用时比较依靠经验积累,主要使用在文章开头四类基本函数式接口中。