在具有不同类型返回的功能接口中为空

Adr*_*r83 5 java if-statement return-type unary-operator

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

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

我的问题:如果我把一个if-statement返回null,是不是有编译器错误?

null 不是它的论点的类型(在我的例子中是Doll)?

内置的功能接口(如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));
    }
}
Run Code Online (Sandbox Code Playgroud)

非常感谢!

Jac*_* G. 5

想一想:

Doll d = null;
Run Code Online (Sandbox Code Playgroud)

null 是任何对象的有效引用,并且对于功能接口没有区别.