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 () คืนค่าเป็นStirng () ของอ็อบเจ็กต์ถ้าไม่ใช่ null หรือส่งคืนสตริง "null"
ตรงจากคลาส String:
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
นั่นหมายความว่าในการยืนยันของคุณคุณกำลังทดสอบ "null" เท่ากับ null ซึ่งจะล้มเหลว