我写了这段代码,但不知道为什么会编译。

UnaryOperator接受特定类型的参数,并返回与其参数类型相同的结果。

我的问题:如果我将if-statement和返回的null放在一起,会不会出现编译器错误?
null不是其参数的类型(在我的情况下是Doll)?

内置功能接口(interface)(例如Consumer,UnaryOperator,Function)是否可以返回null而不是其标准返回值?

这是我的代码:

import java.util.function.*;

public class Doll {

    private int layer;

    public Doll(int layer) {
        super();
        this.layer = layer;
    }

    public static void open(UnaryOperator<Doll> task, Doll doll) {
        while ((doll = task.apply(doll)) != null) {
            System.out.println("X");
        }
    }

    public static void main(String[] args) {
        open(s -> {
            if (s.layer <= 0)
                return null;
            else
                return new Doll(s.layer--);
        }, new Doll(5));
    }
}

非常感谢!

最佳答案

这样想:

Doll d = null;
null是任何对象的有效引用,对于功能接口(interface)也没有不同。

09-11 19:17