หลายครั้งที่ฉันตรวจสอบตัวเองเป็นโมฆะเมื่อดึงค่าจากลำดับชั้นข้อมูลบางอย่างเพื่อหลีกเลี่ยง NullPointerExceptions ซึ่งฉันพบว่ามีแนวโน้มที่จะเกิดข้อผิดพลาดและต้องมีสำเร็จรูปจำนวนมาก
ฉันได้เขียนกิจวัตรที่ง่ายมากซึ่งทำให้ฉันสามารถข้ามการตรวจสอบค่าว่างเมื่อดึงวัตถุ ...
public final class NoNPE {
public static <T> T get(NoNPEInterface<T> in) {
try {
return in.get();
} catch (NullPointerException e) {
return null;
}
}
public interface NoNPEInterface<T> {
T get();
}
}
ฉันใช้มันแบบนี้ ...
Room room = NoNPE.get(() -> country.getTown().getHouses().get(0).getLivingRoom());
ด้านบนทำให้ฉันได้รับวัตถุห้องหรือโมฆะโดยไม่ต้องตรวจสอบระดับผู้ปกครองทั้งหมด
คุณคิดอย่างไรกับข้างต้น? ฉันกำลังสร้างรูปแบบที่มีปัญหาหรือไม่? มีวิธีที่ดีกว่านี้ในความคิดของคุณ?
Option
(หรือMaybe
) monad :) อีกครั้ง
java.util.Optional
แทนค่า Null เพื่อแสดงข้อมูลที่ขาดหายไปหรือไม่? นี่เป็นเครื่องมือที่มีประโยชน์ทั้งสำหรับกรณีที่คุณอธิบายและกรณีที่คุณต้องการดำเนินการกับข้อมูลเริ่มต้นมากกว่าเพียงแค่ส่งคืนสภาพความล้มเหลวในตอนท้ายของห่วงโซ่ ..