方法引用符
双冒号 :: 为引用运算符,而它所在的表达式被称为方法引用。
推到与省略
函数式接口是Lambda的基础,而方法引用是Lambda的孪生兄弟。
代码示例:
在接口PrintableInteger 中定义一个方法print(int str)
@FunctionalInterface
public interface PrintableInteger {
void print(int str);
}
使用方法引用:
public class Demo03PrintOverload {
private static void printInteger(PrintableInteger data) {
data.print(1024);
}
public static void main(String[] args) {
printInteger(System.out::println);
}
}
通过对象名引用成员方法
代码示例:
定义一个类MethodRefObject ,类中存在一个方法printUpperCase(),printUpperCase()方法的作用是将字符串转换成大写形式.
public class MethodRefObject {
public void printUpperCase(String str) {
System.out.println(str.toUpperCase());
}
}
定义函数式接口 Printable
@FunctionalInterface
public interface Printable {
void print(String str);
}
通过创建MethodRefObject 对象,然后通过方法引用符来引用到该类的方法
public class Demo04MethodRef {
private static void printString(Printable lambda) {
lambda.print("Hello");
}
public static void main(String[] args) {
MethodRefObject obj = new MethodRefObject();
printString(obj::printUpperCase);
}
}
通过类名称引用静态方法
首先定义一个函数式接口Calcable,在接口中定义一个calc()方法 :
@FunctionalInterface
public interface Calcable {
int calc(int num);
}
创建一个Demo05Lambda 类,定义一个静态方法method(int num, Calcable lambda),在主函数中直接通过方法引用对方法进行逻辑处理
public class Demo06MethodRef {
private static void method(int num, Calcable lambda) {
System.out.println(lambda.calc(num));
}
public static void main(String[] args) {
method(‐10, Math::abs);
}
}