java中的构造函数引用是一种动态绑定吗?
Is constructor reference in java is a type of dynamic binding?
构造函数引用是一种特殊类型的方法引用,当用于函数式编程时,在没有对 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);
}
}
您的方法引用等同于 lambda 表达式
EmployeeFactory empFactory = (name, age) -> new Employee(name, age);
反过来,这(或多或少)与使用匿名内部 class 实现 EmployeeFactory
接口相同:
EmployeeFactory empFactory = new EmployeeFactory() {
@Override
public Employee getEmployee(String name, int age) {
return new Employee(name, age);
}
};
所以你可以认为你的 empFactory
是 "an object that implements the EmployeeFactory
interface, by implementing the single abstract method getEmployee(...)
to return the result of calling the Employee
constructor"。
另请参阅 Does a lambda expression create an object on the heap every time it's executed? 以了解后一种方法的实现(但不是功能)与构造函数引用之间的一些差异。
构造函数引用是一种特殊类型的方法引用,当用于函数式编程时,在没有对 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);
}
}
您的方法引用等同于 lambda 表达式
EmployeeFactory empFactory = (name, age) -> new Employee(name, age);
反过来,这(或多或少)与使用匿名内部 class 实现 EmployeeFactory
接口相同:
EmployeeFactory empFactory = new EmployeeFactory() {
@Override
public Employee getEmployee(String name, int age) {
return new Employee(name, age);
}
};
所以你可以认为你的 empFactory
是 "an object that implements the EmployeeFactory
interface, by implementing the single abstract method getEmployee(...)
to return the result of calling the Employee
constructor"。
另请参阅 Does a lambda expression create an object on the heap every time it's executed? 以了解后一种方法的实现(但不是功能)与构造函数引用之间的一些差异。