一、方法引用
1、作用
方法引用是为了简化代码,在JDK1.8之后出现的技术。用来代替某些Lambda表达式。
当Lambda表达式中大括号只有一行代码,且这句代码是在调用别的方法并且没有额外参数的时候,就可以简化成方法引用。
2、使用场景:
1.
//Lambda表达式大括号中只有一个输出语句,输出语句就是调用println()方法,所以可以简化成方法引用
stream.forEach(s->System.out.println(s));
// 对象名::方法名
stream.forEach(System.out::println);
2.
//Lambda表达式大括号中只有一个s.length()方法,就可以使用方法引用,变成调用String类的length()方法
stream.map((String s)->{return s.length();}).forEach(System.out::println);
// 类名::方法名
stream.map(String::length).forEach(System.out::println);
3.
//Lambda表达式大括号中只调用了Person的构造方法,且没有传入其他的参数,唯一的参数就是Lambda表达式内的参数name,可以使用方法引用
stream4.map(name->new Person(name)).forEach(System.out::println);
// 类名::new (表示调用类的构造方法)
stream4.map(Person::new).forEach(System.out::println);
4.
//函数式接口--------------
@FunctionalInterface
public interface Inter {
//抽象方法
String method(int[] arr);
}
3、示例代码
public class Test01 {
public static void main(String[] args) {
//要求:如何在main方法中调用show方法
//匿名内部类
show(new Inter() {
@Override
public String method(int[] arr) {
//因为Arrays.toString()方法能够把数组转成字符串,所以我们就调用这个方法
return Arrays.toString(arr);
}
});
//Lambda表达式(因为Inter是函数式接口)
show((int[] arr)->{return Arrays.toString(arr);});
//lambda表达式可以简化
show(arr->Arrays.toString(arr));
//lambda表达式大括号只有一行代码,且代码是在调用别的方法 方法也没有其他参数。
//方法引用(直接调用Arrays类的toString方法)
show(Arrays::toString);
}
//方法
public static void show(Inter i){
//定义数组
int[] arr = {11,22,33};
//调用接口的方法
String s = i.method(arr);
//输出结果
System.out.println(s);
}
}