一、方法引用
1.1 方法引用含义
在学习了 Lambda
表达式之后,我们通常会使用 Lambda
表达式来创建匿名方法。但有的时候我们仅仅是需要调用一个已存在的方法。如下示例:
@FunctionalInterface
public interface Printable {
void print(String msg);
}
public class DemoPrint {
private static void printString(Printable data){
data.print("hello word");
}
public static void main(String[] args) {
printString(s -> System.out.println());
}
}
在 JDK 8
中,我们可以通过一个新特性来简写这段 Lambda
表达式。如下示例:
printString(System.out :: println);
这种特性就叫做方法引用(Method Reference)。
1.2 方法引用符
双冒号 ::
为引用运算符,而它所在的表达式被称为方法引用。
Lambda 格式 :
s -> System.out.println(s);
方法引用格式:
System.out::println
二、方法引用形式
目前方法引用共有以下几种形式:
类型 | 示例 | 代码示例 | 对应的Lambda表达式 |
---|---|---|---|
引用静态方法 | ContainingClass::staticMethodName | String::valueOf | (s) -> String.valueOf(s) |
引用某个对象的实例方法 | containingObject::instanceMethodName | x::toString() | () -> this.toString() |
引用某个类型的任意对象的实例方法 | ContainingType::methodName | String::toString | (s) -> s.toString |
引用构造方法 | ClassName::new | String::new | () -> new String() |