Java 构造函数引用赋值 VS 新建对象赋值
Java constructor reference assignment Vs new created object assignment
我在我们的项目中遇到了以下代码:
MyInterface var = MyClass::new;
和
有区别吗
MyInterface var = new MyClass();
懒惰?
MyInterface var = new MyClass();
创建 MyClass
的实例并将其分配给类型 MyInterface
的变量。这需要 MyClass implements MyInterface
并且有一个无参数的构造函数。结果是 MyClass
的一个实例,它实现了 MyInterface
但它喜欢。
MyInterface var = MyClass::new;
尝试临时实施MyInterface
。这要求 MyInterface
是具有单个抽象方法的 功能接口 。该单个抽象方法必须具有可从 MyClass
分配的 return 类型和匹配 MyClass
构造函数之一的参数列表。
模拟的是:
MyInterface var = new MyInterface() {
public MyClass anyMethodName() {
return new MyClass();
}
}
结果是 MyInterface
的一个实例,它将在调用其单个抽象方法时创建一个新的 MyClass
实例,将其所有参数传递给 MyClass
的构造函数。
换句话说,这两个构造没有任何共同点。
我在我们的项目中遇到了以下代码:
MyInterface var = MyClass::new;
和
有区别吗MyInterface var = new MyClass();
懒惰?
MyInterface var = new MyClass();
创建 MyClass
的实例并将其分配给类型 MyInterface
的变量。这需要 MyClass implements MyInterface
并且有一个无参数的构造函数。结果是 MyClass
的一个实例,它实现了 MyInterface
但它喜欢。
MyInterface var = MyClass::new;
尝试临时实施MyInterface
。这要求 MyInterface
是具有单个抽象方法的 功能接口 。该单个抽象方法必须具有可从 MyClass
分配的 return 类型和匹配 MyClass
构造函数之一的参数列表。
模拟的是:
MyInterface var = new MyInterface() {
public MyClass anyMethodName() {
return new MyClass();
}
}
结果是 MyInterface
的一个实例,它将在调用其单个抽象方法时创建一个新的 MyClass
实例,将其所有参数传递给 MyClass
的构造函数。
换句话说,这两个构造没有任何共同点。