前面聊方法引用的,但还有一种神奇的引用那就是构造器引用。
具体格式:
ClassName : : new
具体演示很简单,这个其实很方法引用的条件差不多:
构造器引用,说白一个函数式接口,可以通过lambda表达式进行实现,同时其内部只有一行代码,这一行代码其调用了另一个类构造方法。
前面聊四大核心函数式接口的时候。
-
Supplier<T>,供给型接口,返回值 T
-
Function<T, R> 函数型接口,返回值 R
例如这两个演示一下:
首先有一个对象类:
class ObJ{
private String name;
public ObJ( ){
System.out.println("调用无参构造方法");
}
public ObJ(String name) {
this.name = name;
System.out.println("调用有参构造方法");
}
}
利用Supplier<T> 返回一个无参的Obj对象
public class test {
public static void main(String[] args) {
// 方法1 传统方式
Supplier<ObJ> supplier=new Supplier<ObJ>() {
@Override
public ObJ get() {
return new ObJ();
}
};
ObJ obj=supplier.get();
// 方法2 lambda
Supplier<ObJ> supplier1=() ->{
return new ObJ();};
ObJ obj1=supplier1.get();
// 方法3 构造方式引用
Supplier<ObJ> supplier2=ObJ :: new;
ObJ obj2=supplier2.get();
}
}
利用Function<T, R>返回一个有参的Obj对象
public class test {
public static void main(String[] args) {
// 方法1 传统方式
Function<String , ObJ> function=new Function<String, ObJ>() {
@Override
public ObJ apply(String t) {
return new ObJ(t);
}
};
ObJ obj=function.apply("张三");
// 方法2 lambda
Function<String , ObJ> function1= t ->{
return new ObJ(t);};
ObJ obj1=function1.apply("张三");
// 方法3 构造方式引用
Function<String , ObJ> function2= ObJ :: new;
ObJ obj2=function2.apply("张三");
}
}
扫描二维码关注公众号,回复:
13393208 查看本文章
其实在有时候用的话就会显得繁琐,毕竟我直接 Obj obj=new Obj()
不就行了,干嘛这样非的用构造器引用。暂时先理解这种用法,到时候看实际应用中如何体现其优越性。
补充 数组构造引用
数组可以看成一个特殊的类,这样更容易理解。
public class test {
public static void main(String[] args) {
// 方法1 传统方式
Function<Integer, String[]> function=new Function<Integer, String[]>() {
@Override
public String[] apply(Integer t) {
return new String[t];
}
};
System.out.println(Arrays.toString(function.apply(10)));
// 方法2 lambda
Function<Integer, String[]> function1= t ->{
return new String[t];};
System.out.println(Arrays.toString(function1.apply(10)));
// 方法3 构造方式引用
Function<Integer, String[]> function2= String[] :: new;
System.out.println(Arrays.toString(function2.apply(10)));
}
}