जावा डिजाइनरों ने java.lang.String
कक्षा में स्ट्रिंग हेरफेर विधियों के स्थिर संस्करण क्यों नहीं बनाए ? निम्नलिखित विधियां हैं जो मैं संदर्भित करता हूं, लेकिन प्रश्न को कक्षा में अन्य गैर-स्थिर तरीकों तक भी बढ़ाया जा सकता है।
concat(String) substring(int, int)
replace(char, char) toLowerCase()
replace(CharSequence, CharSequence) toLowerCase(Locale)
replaceAll(String, String) toString()
replaceFirst(String, String) toUpperCase()
split(String) toUpperCase(Locale)
split(String, int) trim()
substring(int)
इन विधियों के केवल गैर-स्थैतिक संस्करण होने से स्पष्ट रूप से अशक्त जाँच होती है, कहीं भी इस तरह की विधि को कॉल करना पड़ता है। उदाहरण के लिए, बस कॉल example = example.trim()
करने से NullPointerException ले जाएगा यदि String example = null
। तो प्रोग्रामर को निम्नलिखित बॉयलरप्लेट नल की जाँच करनी होगी:
if (example != null)
example = example.trim();
// OR:
example = (example==null) ? null : example.trim();
example = (example==null) ? null : example.substring(5);
मुझे लगता है कि अगर String
यह इन विधियों (शायद भी विशेष रूप से ) के स्थिर संस्करण थे, तो यह बहुत अधिक सुविधाजनक होगा, जो पहले तर्क के रूप में इनपुट स्ट्रिंग लेगा:
example = String.trim(example);
example = String.replace(example, 'a', 'b');
example = String.substring(example, 5);
इससे प्रोग्रामर्स द्वारा लिखे गए क्लीनर कोड को बढ़ावा मिला होगा, जो प्रोग्रामर को स्पष्ट रूप से अशक्त मामलों को संभालने के लिए मजबूर करने के बजाय, केवल नल को वापस करके शून्य मामलों की देखभाल करेगा। अशक्त की वापसी मेरे लिए एक शून्य में हेरफेर करने के बाद से समझ में आता है स्ट्रिंग एक में परिणाम चाहिए अशक्त स्ट्रिंग, नहीं एक त्रुटि।
जब String
Java 1 या Java 2 में क्लास डिज़ाइन किया , या बाद के Java वर्जन में भी इस तरह की फंक्शनलिटी को जोड़ा तो Java डिज़ाइनरों ने ऐसा क्यों नहीं सोचा ?
null
एक असाधारण स्थिति है और इसे स्पष्ट रूप से नियंत्रित किया जाना चाहिए।
Maybe<T>
प्रकार का खराब कार्यान्वयन है , मुझे लगता है?
string name = employee?.personalData?.name
। बस इन सभी के लिए एक दोहराव के रूप में शॉर्टकट if (employee != null)
। संबंधित SO प्रश्न: stackoverflow.com/questions/1196031/…