—–通过学习尚硅谷视频所得—–
方法引用使用lambda创建匿名方法,有时候,lambda表达式只是调用一个已存在的方法,不做其他任何事,这种情况,通过一个方法名字来引用已存在的方法会更加清晰.
注意方法引用是一个Lambda表达式,其中方法引用的操作符是双冒号”::”。
主要有三种语法格式:
对象::实例方法名
PrintStream ps=System.out;
Consumer<String> con1=ps::print;
con1.accept("adcdef");
类::静态方法名
Comparator<Integer> com1=Integer::compare;
类::实例方法名
BiPredicate<String,String> bp2=String::equals;
关于方法引用, 感觉这篇博客写的不错: javascript:void(0)
构造器引用与函数式接口相结合,自动与函数式接口中方法兼容。可以把构造器引用赋值给定义的方法,与构造器参数列表要与函数式接口中抽象方法的参数列表一致!
格式: ClassName::new
调用无参构造器
// lambda调用方式
Supplier<Employee> sup=()-> new Employee();
//构造器引用方式
Supplier<Employee> sup2=Employee::new;
调用一个参数构造函数
//lambda调用方式
Function<Integer,Employee> fun=(x)->new Employee(x);
//构造器引用方式
Function<Integer,Employee> fun2=Employee::new;
数组引用
Type::new
//lambda表达式
Function<Integer,String[]> fun = (x) -> new String[x];
String[] str= fun.apply(10);
//数组引用方式
Function<Integer,String[]> fun2=String[]::new;
String[] str2=fun2.apply(20);