อย่าใช้ null ให้ใช้ตัวเลือก
ดังที่คุณได้ชี้ให้เห็นแล้วหนึ่งในปัญหาที่ใหญ่ที่สุดnullใน Java คือมันสามารถใช้ได้ทุกที่หรืออย่างน้อยก็สำหรับการอ้างอิงทุกประเภท
เป็นไปไม่ได้ที่จะบอกได้ว่าอาจเป็นnullและสิ่งที่เป็นไปไม่ได้
Java 8 Optionalเปิดตัวรูปแบบที่ดีมาก:
และตัวอย่างจาก Oracle:
String version = "UNKNOWN";
if(computer != null) {
Soundcard soundcard = computer.getSoundcard();
if(soundcard != null) {
USB usb = soundcard.getUSB();
if(usb != null) {
version = usb.getVersion();
}
}
}
หากแต่ละสิ่งเหล่านี้อาจหรือไม่อาจส่งกลับค่าที่ประสบความสำเร็จคุณสามารถเปลี่ยน API Optionalเป็น:
String name = computer.flatMap(Computer::getSoundcard)
.flatMap(Soundcard::getUSB)
.map(USB::getVersion)
.orElse("UNKNOWN");
โดยการเข้ารหัสทางเลือกอย่างชัดเจนในประเภทอินเทอร์เฟซของคุณจะดีขึ้นมากและรหัสของคุณจะสะอาดขึ้น
หากคุณไม่ได้ใช้ Java 8 คุณสามารถดูได้com.google.common.base.Optionalใน Google Guava
คำอธิบายที่ดีจากทีม Guava: https://github.com/google/guava/wiki/UsingAndAvoidingNullExplained
คำอธิบายทั่วไปของข้อเสียเป็นโมฆะโดยมีตัวอย่างจากหลายภาษา: https://www.lucidchart.com/techblog/2015/08/31/the-worst-mistake-of-computer-science/
@Nullull, @Nullable
Java 8 เพิ่มหมายเหตุประกอบเหล่านี้เพื่อช่วยให้เครื่องมือตรวจสอบโค้ดเช่น IDEs ตรวจพบปัญหา พวกมันค่อนข้างมีประสิทธิภาพ จำกัด
ตรวจสอบเมื่อมันทำให้รู้สึก
อย่าเขียนโค้ด 50% ของการตรวจสอบค่าว่างโดยเฉพาะอย่างยิ่งหากไม่มีสิ่งที่เหมาะสมที่รหัสของคุณสามารถทำได้ด้วยnullค่า
ในทางกลับกันหากnullสามารถใช้งานและหมายถึงบางสิ่งได้
ท้ายที่สุดคุณไม่สามารถลบออกnullจาก Java ได้ ฉันขอแนะนำให้แทนที่สิ่งที่Optionalเป็นนามธรรมเมื่อใดก็ตามที่เป็นไปได้และตรวจสอบnullเวลาอื่น ๆ ที่คุณสามารถทำสิ่งที่สมเหตุสมผลเกี่ยวกับเรื่องนี้