शून्य का उपयोग न करें, वैकल्पिक का उपयोग करें
जैसा कि आपने बताया है, nullजावा में सबसे बड़ी समस्याओं में से एक यह है कि इसका उपयोग हर जगह किया जा सकता है , या कम से कम सभी संदर्भ प्रकारों के लिए।
यह बताना असंभव है कि nullक्या हो सकता है और क्या नहीं।
जावा 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();
}
}
}
यदि इनमें से प्रत्येक एक सफल मान लौटा सकता है या नहीं दे सकता है, तो आप एपीआई को बदल सकते हैं Optional:
String name = computer.flatMap(Computer::getSoundcard)
.flatMap(Soundcard::getUSB)
.map(USB::getVersion)
.orElse("UNKNOWN");
प्रकार में वैकल्पिक रूप से एन्कोडिंग को स्पष्ट करके, आपके इंटरफेस बहुत बेहतर होंगे, और आपका कोड क्लीनर होगा।
यदि आप जावा 8 का उपयोग नहीं कर रहे हैं, तो आप com.google.common.base.OptionalGoogle अमरूद में देख सकते हैं ।
अमरूद टीम द्वारा एक अच्छी व्याख्या: https://github.com/google/guava/wiki/UsingAndAvoidingNullExplained
कई भाषाओं के उदाहरणों के साथ अशक्त करने के लिए नुकसान की एक अधिक सामान्य व्याख्या: https://www.lucidchart.com/techblog/2015/08/31/the-worst-mistake-of-computer-science/
@ नोनल, @ न्यूबल
जावा 8 कोड एनोटेशन को पकड़ने में मदद करने के लिए इन एनोटेशन को जोड़ता है जैसे IDEs समस्याओं को पकड़ते हैं। वे अपनी प्रभावशीलता में काफी सीमित हैं।
जाँच करें कि यह कब समझ में आता है
अपने कोड की 50% जांच शून्य से न लिखें, खासकर अगर कुछ भी समझदार न हो तो आपका कोड एक nullमूल्य के साथ कर सकता है ।
दूसरी ओर, अगर nullइस्तेमाल किया जा सकता है और इसका मतलब कुछ है, तो इसका उपयोग करना सुनिश्चित करें।
अंततः, आप स्पष्ट रूप nullसे जावा से नहीं निकाल सकते । Optionalजब भी संभव हो, मैं दृढ़ता से एब्सट्रैक्ट को प्रतिस्थापित करने की सलाह देता हूं , और nullउन अन्य समय की जांच कर रहा हूं कि आप इसके बारे में कुछ उचित कर सकते हैं।