我在代码中遇到了我们的项目:
MyInterface var = MyClass::new;
与
有区别吗?MyInterface var = new MyClass();
懒惰?
答案 0 :(得分:7)
MyInterface var = new MyClass();
创建MyClass
的实例,并将其分配给MyInterface
类型的变量。这需要MyClass implements MyInterface
并且具有无参数构造函数。结果是MyClass
的一个实例,它实现了MyInterface
但它喜欢。
MyInterface var = MyClass::new;
尝试实施MyInterface
ad-hoc。这要求功能接口中的MyInterface
具有单个抽象方法。该单个抽象方法必须具有可从MyClass
分配的返回类型以及与MyClass
'构造函数之一匹配的参数列表。
类似于:
MyInterface var = new MyInterface() {
public MyClass anyMethodName() {
return new MyClass();
}
结果是MyInterface
的一个实例,它将在其单个抽象方法的调用中创建一个新的MyClass
实例,将其所有参数传递给MyClass
的构造函数。
换句话说,这两种结构没有任何共同之处。