जब तक आप जेनरिक के साथ व्यवहार नहीं कर रहे हैं, तब तक मानक अभ्यास प्राथमिकताओं के साथ जाना है (सुनिश्चित करें कि आप ऑटोबॉक्सिंग और अनबॉक्सिंग के बारे में जानते हैं !)।
सम्मेलन का पालन करने के लिए कई अच्छे कारण हैं:
1. आप साधारण गलतियों से बचते हैं:
कुछ सूक्ष्म, गैर-सहज मामले हैं जो अक्सर शुरुआती को पकड़ते हैं। यहां तक कि अनुभवी कोडर भी फिसल जाते हैं और कभी-कभी इन गलतियों को करते हैं (उम्मीद है कि जब वे कोड को डीबग करेंगे और त्रुटि का पता लगाएंगे!)
के a == b
बजाय सबसे कमोन गलती का उपयोग कर रहा है a.equals(b)
। लोगों का उपयोग a == b
आदिम के साथ करने के लिए किया जाता है इसलिए यह आसानी से हो जाता है जब आप ऑब्जेक्ट रैपर का उपयोग कर रहे होते हैं।
Integer a = new Integer(2);
Integer b = new Integer(2);
if (a == b) { // Should be a.equals(b)
// This never gets executed.
}
Integer c = Integer.valueOf(2);
Integer d = Integer.valueOf(2);
if (c == d) { // Should be a.equals(b), but happens to work with these particular values!
// This will get executed
}
Integer e = 1000;
Integer f = 1000;
if (e == f) { // Should be a.equals(b)
// Whether this gets executed depends on which compiler you use!
}
2. पढ़ें:
निम्नलिखित दो उदाहरणों पर विचार करें। अधिकांश लोग कहेंगे कि दूसरा अधिक पठनीय है।
Integer a = 2;
Integer b = 2;
if (!a.equals(b)) {
// ...
}
int c = 2;
int d = 2;
if (c != d) {
// ...
}
3. प्रदर्शन:
तथ्य यह है कि यह केवल प्राथमिकताओं का उपयोग करने की तुलना में प्राथमिकताओं के लिए ऑब्जेक्ट रैपर का उपयोग करने के लिए धीमा है। आप उन चीजों के लिए ऑब्जेक्ट इंस्टेंटेशन, मेथड कॉल आदि की लागत जोड़ रहे हैं जो आप सभी जगह उपयोग करते हैं ।
नुथ के "... समय के बारे में 97% का कहना है: समय से पहले अनुकूलन सभी बुराई की जड़ है" बोली वास्तव में यहां लागू नहीं होती है। वह उन अनुकूलन के बारे में बात कर रहा था जो कोड (या सिस्टम) को अधिक जटिल बनाते हैं - यदि आप बिंदु # 2 से सहमत हैं, तो यह एक अनुकूलन है जो कोड को कम जटिल बनाता है!
4. यह सम्मेलन है:
यदि आप अन्य जावा प्रोग्रामर के 99% अलग-अलग शैलीगत विकल्प चुनते हैं, तो 2 डाउनसाइड हैं:
- आपको अन्य लोगों का कोड पढ़ने में कठिन लगेगा। 99% उदाहरण / ट्यूटोरियल / आदि बाहर आदिम का उपयोग करेंगे। जब भी आप एक को पढ़ते हैं, तो आपके पास यह सोचने का अतिरिक्त संज्ञानात्मक ओवरहेड होगा कि यह उस शैली में कैसे दिखाई देगा, जिसका आप उपयोग कर रहे हैं।
- अन्य लोगों को आपका कोड पढ़ने में कठिन लगेगा। जब भी आप स्टैक ओवरफ्लो पर सवाल पूछते हैं, तो आपको जवाब / टिप्पणियों के माध्यम से यह पूछना होगा कि "आप आदिम का उपयोग क्यों नहीं कर रहे हैं?"। यदि आप मुझ पर विश्वास नहीं करते हैं, तो बस उन लड़ाइयों को देखें जिन पर लोगों के पास ब्रैकेट प्लेसमेंट जैसी चीजें हैं, जो उत्पन्न कोड को भी प्रभावित नहीं करता है!
आम तौर पर मैं कुछ प्रति-बिंदुओं की सूची बनाऊंगा, लेकिन मैं ईमानदारी से किसी भी अच्छे कारणों के बारे में नहीं सोच सकता, क्योंकि यहां अधिवेशन नहीं होगा!