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 的构造函数。


换句话说,这两个构造没有任何共同点。