Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中的构造函数引用是一种动态绑定吗?_Java_Java 8_Method Reference - Fatal编程技术网

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

java中的构造函数引用是一种动态绑定吗?,java,java-8,method-reference,Java,Java 8,Method Reference,构造函数引用是一种特殊类型的方法引用,当用于函数编程时,在函数接口中未声明任何抽象方法的显式定义的情况下对其进行求值。你能帮我解决这个复杂的问题吗?特别是对于以下程序,如何计算empFactory对象 public class Employee{ String name; Integer age; public Employee(String name, Integer age){ this.name=name; this.age=age; } } public interfa

构造函数引用是一种特殊类型的方法引用,当用于函数编程时,在函数接口中未声明任何抽象方法的显式定义的情况下对其进行求值。你能帮我解决这个复杂的问题吗?特别是对于以下程序,如何计算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);
  }
}

方法引用与lambda表达式等效

EmployeeFactory empFactory = (name, age) -> new Employee(name, age);
反过来,这(或多或少)与使用实现
EmployeeFactory
接口的匿名内部类相同:

EmployeeFactory empFactory = new EmployeeFactory() {
    @Override
    public Employee getEmployee(String name, int age) {
        return new Employee(name, age);
    }
};
因此,您可以认为您的
empFactory
是“通过实现单个抽象方法
getEmployee(…)
来返回调用
Employee
构造函数的结果,从而实现
EmployeeFactory
接口的对象”


另请参阅后一种方法的实现(但不是功能)与构造函数引用之间的一些差异。

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

EmployeeFactory empFactory = (name, age) -> new Employee(name, age);
反过来,这(或多或少)与使用实现
EmployeeFactory
接口的匿名内部类相同:

EmployeeFactory empFactory = new EmployeeFactory() {
    @Override
    public Employee getEmployee(String name, int age) {
        return new Employee(name, age);
    }
};
因此,您可以认为您的
empFactory
是“通过实现单个抽象方法
getEmployee(…)
来返回调用
Employee
构造函数的结果,从而实现
EmployeeFactory
接口的对象”


另请参阅,了解后一种方法的实现(但不是功能)与构造函数参考之间的一些差异。

public abstract
在接口上是多余的。也是
接口
(小写)不是
接口
我不明白你的问题,这是
方法参考
,这里没有什么特别的事情;它只是一种叫做
构造函数引用的形式。你可以用
BiFunction
b替换
EmployeeFactory
,这当然是真的,谢谢@JuanCarlosMendozaNo,
Employee::new
实际上是
Employee::Employee
带有签名(参数类型)
(字符串,整数)
。构造函数引用不太“动态”而不是对非
私有实例方法的方法引用。在编译时,运行时会发生什么是完全清楚的。
public abstract
在接口上是多余的。也是
接口
(小写)不是
接口
我不明白你的问题,这是
方法参考
,这里没有什么特别的事情;它只是一种叫做
构造函数引用的形式。你可以用
BiFunction
b替换
EmployeeFactory
,这当然是真的,谢谢@JuanCarlosMendozaNo,
Employee::new
实际上是
Employee::Employee
带有签名(参数类型)
(字符串,整数)
。构造函数引用不太“动态”而不是对非
私有实例方法的方法引用。在编译时,运行时将发生什么是完全清楚的。