Objects.isNull so với Optional.ofNullable [trùng lặp]

Oct 21 2020

Tôi có đoạn mã này được sử dụng trong một bài kiểm tra

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

và khi tôi thay thế đoạn mã này bằng

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

Tôi có lỗi xác nhận này trong các thử nghiệm của mình:

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

Trả lời

2 ernest_k Oct 21 2020 at 17:12

Optional.ofNullable(String.valueOf(o))sẽ không phải là một tùy chọn trống khi o == null, vì String.valueOf(null)trả về Chuỗi "null".

Việc sử dụng đúng tùy chọn có:

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

Nơi ofNullable(null)sẽ tạo một tùy chọn trống, khiến orElse(null)cuối cùng sẽ được gọi.

1 ShekharKhairnar Oct 21 2020 at 17:11

String.valueOf () trả vềStirng () của một đối tượng nếu không phải null hoặc trả về chuỗi "null"

trực tiếp từ lớp String:

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

điều đó có nghĩa là trong khẳng định của bạn, bạn đang kiểm tra "null" bằng null mà không thành công.