Java构造函数引用赋值与新创建的对象赋值

时间:2015-06-04 10:15:26

标签: java constructor java-8 variable-assignment method-reference

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

MyInterface var = MyClass::new;

有区别吗?
MyInterface var = new MyClass();

懒惰?

1 个答案:

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

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