具有不同类型 return 的功能接口中为 Null

Null in functional interface with different type return

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

UnaryOperator 采用特定类型的参数,return结果的参数类型相同。

我的问题:如果我把 if-statement 和 return null 放在一起,会不会出现编译错误?

null 不是其参数的类型(在我的例子中是 Doll)?

内置功能接口(如 Consumer、UnaryOperator、Function)是否可以 return null 而不是其标准 return?

这是我的代码:

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));
    }
}

非常感谢!

内置函数式接口没有什么特别之处。 return 引用类型的任何方法都可以 return null。这包括功能接口方法的lambda表达式实现。

这样想:

Doll d = null;

null 是对任何对象的有效引用,对于函数式接口也一样。