2

我在我们的项目中遇到了以下代码:

MyInterface var = MyClass::new;

有区别吗

MyInterface var = new MyClass();

懒惰的?

4

1 回答 1

9
MyInterface var = new MyClass();

创建 的实例MyClass并将其分配给类型 的变量MyInterface。这需要它MyClass implements MyInterface并且有一个无参数的构造函数。结果是一个实例,MyClass它实现MyInterface了它喜欢的方式。


MyInterface var = MyClass::new;

尝试实现MyInterfacead-hoc。这要求它MyInterface是一个具有单个抽象方法的功能接口。该单个抽象方法必须具有可分配的返回类型和与' 构造函数MyClass之一匹配的参数列表。MyClass

它类似于:

MyInterface var = new MyInterface() {
    public MyClass anyMethodName() {
        return new MyClass();
    }
}

结果是一个实例,MyInterface该实例将在调用其单个抽象方法时创建一个新实例,MyClass并将其所有参数传递给MyClass.


换句话说,这两种结构没有任何共同之处。

于 2015-06-04T10:26:27.393 回答