Java基础之1.8 构造器引用

前面聊方法引用的,但还有一种神奇的引用那就是构造器引用。

具体格式:

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("张三");



	}



}

在这里插入图片描述

其实在有时候用的话就会显得繁琐,毕竟我直接 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)));



	}

}


在这里插入图片描述

Guess you like

Origin blog.csdn.net/u011863822/article/details/121427637