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