黑猴子的家:Java 8 -> 构造器引用

1、概念

格式:ClassName::new 与函数式接口相结合,自动与函数式接口中方法兼容。 可以把构造器引用赋值给定义的方法,要求构造器参数列表要与接口中抽象方法的参数列表一致!且方法的返回值即为构造器对应类的对象。

2、样例

Lambda表达式

Function fun1 = n -> new MyClass(n);

构造器引用

Function fun2 = MyClass::new;
3、案例
package com.yinggu.demo8;
import java.util.function.Function;
import java.util.function.Supplier;
import org.junit.Test;
import com.yinggu.domain.Employee;

* @author 黑猴子的家 
 * https://www.jianshu.com/u/37fd8e2dff4c
 * 此类用于演示构造器引用 
特点:相当于代替了具备特殊要求的Lambda表达式作为函数式接口的实例 
要求: 
 * 1.方法体中,仅仅就有一个语句而且是返回语句
 * 2.返回的是一个new 出来的对象 
 * 3.函数式接口的抽象方法的参数列表=对象构造器的参数列表+对象类型 语法: 类型::new

public class TestConstructorRef {
      
      // 无参
      @Test
      public void test1() {
            
            // Lambda表达式
            Supplier sup = () -> new Employee();
            
            // 构造器引用
            Supplier sup2 = Employee::new;
      }

      // 一个参数
      @Test
      public void test2() {
            
            // Lambda表达式
            Function fun = (str) -> new String(str);
            
            // 构造器引用
            Function fun2 = String::new;
      }

      // 多个参数
      @Test
      public void test3() {
            
            // Lambda表达式
            MyInterface m = 
                        (id, name, age, salary) -> new Employee(id, name,
                                                                                    age, salary);

            // 构造器引用
            MyInterface m2 = Employee::new;
      }
}

interface MyInterface {
      K operate(T t, R r, U u, E e);
}

你可能感兴趣的:(黑猴子的家:Java 8 -> 构造器引用)