Что если мы сделаем метод Optional.of закрытым и разрешим только Optional.ofNullable в Java;будет ли какая-либо проблема, кроме обратной совместимости? - PullRequest
0 голосов
/ 13 февраля 2019

Этот вопрос необходимо обновить, поскольку он помечен как дублированный, но все связанные вопросы не полностью соответствуют тому, что пытаются задать:

Есть ли причина, по которой Optional.of(aNullableVar)требуется, поскольку Optional.ofNullable(aNullableVar) проверяет наличие нулевого указателя внутри метода?

Поскольку на что Спаситель ответил , цель может быть похожа на условие охраны:

Object object = getObject();
Optional.of(object);
System.out.println(object.toString());

Это эквивалентно:

Object object = getObject();
Objects.requireNonNull(object);
System.out.println(object.toString());

и

Object object = getObject();
if (object == null) {
    throw new NullPointerException();
}
System.out.println(object.toString());

Необязательный.of в Java 8:

public static <T> Optional<T> of(T value) {
    return new Optional<>(value);
}

Необязательный.ofNullable в Java8:

public static <T> Optional<T> ofNullable(T value) {
    return value == null ? empty() : of(value);
}

1 Ответ

0 голосов
/ 13 февраля 2019

Optional.of служит двойной цели построения Optional с заданным значением, отличным от null, но также с ошибкой быстро , если значение действительно null.

Это аналогично

Objects.requireNonNull(value);
// and then using value

Таким образом, ничего не сломалось бы, вы гораздо позже узнаете, что использовали значение null для создания этого Optional, когда вы должнынет.

...