Нуль в функциональном интерфейсе с возвратом другого типа - PullRequest
0 голосов
/ 12 ноября 2018

Я пишу этот код, но я не знаю, почему он компилируется.

UnaryOperator принимает аргумент определенного типа и возвращает результат с тем же типом своего аргумента.

Мой вопрос: если я поставлю if-statement с возвращением null, не будет ли ошибка компилятора?

null не является ли тип аргумента его (в моем случае это Кукла)?

Может ли встроенный функциональный интерфейс (например, Consumer, UnaryOperator, Function) возвращать ноль вместо стандартного возврата?

Это мой код:

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

Большое спасибо!

Ответы [ 2 ]

0 голосов
/ 12 ноября 2018

Думайте об этом так:

Doll d = null;

null является действительной ссылкой для любого объекта и не отличается для функциональных интерфейсов.

0 голосов
/ 12 ноября 2018

Нет ничего особенного во встроенных функциональных интерфейсах.Любой метод, который возвращает ссылочный тип, может вернуть null.Это включает в себя реализацию лямбда-выражения метода функционального интерфейса.

...