Objects.isNullと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)"null"

オプションの正しい使用法は次のとおりです。

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

どこでofNullable(null)空をオプションにし、orElse(null)最終的に呼び出されるようにします。

1 ShekharKhairnar Oct 21 2020 at 17:11

String.valueOf()は、nullでない場合はオブジェクトのtoStirng()を返すか、「null」文字列を返します

Stringクラスから直接:

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

つまり、アサーションでテストしている「null」はnullに等しく、失敗します。