java中的构造函数引用是一种动态绑定吗?

Sur*_*hra 1 java java-8 method-reference

构造函数引用(用于函数式编程时是一种特殊类型的方法引用)在没有在Functional接口中声明的抽象方法的任何显式定义的情况下进行求值.你能帮我解决它的解决方法或链接的复杂性吗?特别是对于以下程序如何评估empFactory对象?

public class Employee{
 String name;
 Integer age;
 public Employee(String name, Integer age){
  this.name=name;
  this.age=age;
 }
}

public interface EmployeeFactory{
 public abstract Employee getEmployee(String name, Integer age);
}


public class Run{
  public static void main(String... args){
  EmployeeFactory empFactory=Employee::new;
  Employee emp= empFactory.getEmployee("Ammy Sen", 25);
  }
}
Run Code Online (Sandbox Code Playgroud)

Jam*_*s_D 7

您的方法引用等效于lambda表达式

EmployeeFactory empFactory = (name, age) -> new Employee(name, age);
Run Code Online (Sandbox Code Playgroud)

反过来,这(或多或少)与使用实现EmployeeFactory接口的匿名内部类相同:

EmployeeFactory empFactory = new EmployeeFactory() {
    @Override
    public Employee getEmployee(String name, int age) {
        return new Employee(name, age);
    }
};
Run Code Online (Sandbox Code Playgroud)

因此,您可以将您empFactory视为"实现EmployeeFactory接口的对象,通过实现单个抽象方法getEmployee(...)来返回调用Employee构造函数的结果".

另请参阅lambda表达式是否在每次执行时都在堆上创建一个对象?对于后一种方法的实现(但不是功能)与构造函数引用之间的某些差异.