Objects.isNull vs. Optional.ofNullable [дубликат]

Oct 21 2020

Я использовал этот фрагмент кода в тесте

if (Objects.isNull(o)) {
            return null;
        }
        return String.valueOf(o);   

и когда я заменяю этот фрагмент кода на

Optional.ofNullable(String.valueOf(o)).orElse(null);

В моих тестах есть эта ошибка утверждения:

Expecting: <"null">
to be equal to: <null>
but was not.

Ответы

2 ernest_k Oct 21 2020 at 17:12

Optional.ofNullable(String.valueOf(o))не будет пустым необязательным, когда o == null, потому что String.valueOf(null)возвращает String "null".

Правильное использование необязательного есть:

Optional.ofNullable(o).map(String::valueOf).orElse(null);

Где ofNullable(null)сделает пустой необязательный, вызывающий orElse(null)в конечном итоге вызов.

1 ShekharKhairnar Oct 21 2020 at 17:11

String.valueOf () возвращает toStirng () объекта, если не null, или возвращает "нулевую" строку

прямо из класса String:

public static String valueOf(Object obj) {
        return (obj == null) ? "null" : obj.toString();
    }

это означает, что в вашем утверждении вы проверяете, что "null" равно null, что приводит к ошибке.