वापसी अशक्त; यह आवश्यक है क्योंकि एक अपवाद को पकड़ा जा सकता है, हालांकि इस तरह के एक मामले में जब से हम पहले से ही जांच कर रहे थे कि क्या यह अशक्त था (और हमें लगता है कि हम उस वर्ग को जानते हैं जिसे हम क्लोनिंग का समर्थन करते हैं) तो हम जानते हैं कि कोशिश कथन कभी भी विफल नहीं होगा।
यदि आप ऐसे विवरणों के बारे में जानकारी जानते हैं, जिसमें आप जानते हैं कि tryकथन कभी भी विफल नहीं हो सकता है, तो इसके होने का क्या मतलब है? tryयदि आप जानते हैं कि आप हमेशा सफल होने जा रहे हैं (हालांकि यह दुर्लभ है कि आप अपने कोडबेस के पूरे जीवनकाल के लिए बिल्कुल सुनिश्चित हो सकते हैं) से बचें ।
किसी भी मामले में, संकलक दुर्भाग्य से एक मन पाठक नहीं है। यह फ़ंक्शन और इसके इनपुट को देखता है, और इसके पास जो जानकारी है, उसे देखते हुए, इसे returnनीचे दिए गए विवरण की आवश्यकता है जैसा कि आपके पास है।
क्या सिंटैक्स को संतुष्ट करने और संकलन त्रुटियों से बचने के लिए अंत में अतिरिक्त रिटर्न स्टेटमेंट में डालना बुरा व्यवहार है (एक टिप्पणी के साथ यह समझा नहीं जा सकेगा), या क्या इस तरह से कुछ कोड करने का एक बेहतर तरीका है ताकि अतिरिक्त रिटर्न स्टेटमेंट अनावश्यक है
इसके विपरीत, मेरा सुझाव है कि किसी भी संकलक की चेतावनी से बचने के लिए यह अच्छा अभ्यास है, उदाहरण के लिए, भले ही कोड की एक और पंक्ति की लागत हो। यहां लाइन काउंट के बारे में ज्यादा चिंता न करें। परीक्षण के माध्यम से फ़ंक्शन की विश्वसनीयता स्थापित करें और फिर आगे बढ़ें। केवल यह दिखावा करते हुए कि आप returnकथन को छोड़ सकते हैं , एक वर्ष बाद उस कोड पर वापस आने की कल्पना करें और फिर यह निर्णय लेने का प्रयास करें कि क्या returnनीचे दिया गया कथन कुछ टिप्पणी की तुलना में अधिक भ्रम पैदा करने वाला है क्योंकि यह मान्यताओं के कारण इसे छोड़ दिया गया था क्यों इनपुट मापदंडों के बारे में बताएं। सबसे अधिक संभावना है कि returnबयान से निपटना आसान होगा।
इस भाग के बारे में विशेष रूप से कहा:
try {
return a.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
...
return null;
मुझे लगता है कि यहां अपवाद से निपटने की मानसिकता के साथ कुछ अजीब है। आप आम तौर पर एक साइट पर अपवादों को निगलना चाहते हैं जहां आपके पास कुछ सार्थक है जो आप प्रतिक्रिया में कर सकते हैं।
आप try/catchएक लेनदेन तंत्र के रूप में सोच सकते हैं । tryये परिवर्तन करते हुए, यदि वे विफल होते हैं और हम catchब्लॉक में शाखा करते हैं , तो catchरोलबैक और रिकवरी प्रक्रिया के हिस्से के रूप में ऐसा करें (जो भी ब्लॉक में है)।
इस स्थिति में, केवल स्टैकट्रेस को प्रिंट करना और फिर अशक्त होने के लिए मजबूर होना बिल्कुल लेनदेन / वसूली मानसिकता नहीं है। कोड त्रुटि-हैंडलिंग जिम्मेदारी को सभी कोड कॉलिंग getCloneमें मैन्युअल रूप से विफलताओं की जांच करने के लिए स्थानांतरित करता है । आप को पकड़ने के लिए पसंद कर सकते हैंCloneNotSupportedException अपवाद और उसका अनुवाद , अपवाद का अधिक अर्थपूर्ण रूप और उसे फेंक सकते हैं, लेकिन आप केवल अपवाद को निगलना नहीं चाहते हैं और इस मामले में एक शून्य वापस करना चाहते हैं क्योंकि यह लेनदेन-वसूली साइट की तरह नहीं है।
आप अंत में कॉल करने वालों की जिम्मेदारियों को मैन्युअल रूप से जांचने और विफलता से निपटने के लिए उस तरह से समाप्त करेंगे, जब एक अपवाद फेंकने से यह बच जाएगा।
यदि आप किसी फ़ाइल को लोड करते हैं, तो यह उच्च-स्तरीय लेनदेन है। आपके पास हो सकता है try/catch। tryingकिसी फ़ाइल को लोड करने की प्रक्रिया के दौरान , आप वस्तुओं को क्लोन कर सकते हैं। यदि इस उच्च-स्तरीय ऑपरेशन (फ़ाइल को लोड करना) में कहीं भी विफलता है, तो आप आमतौर पर अपवादों को इस शीर्ष-स्तरीय लेन-देन try/catchब्लॉक में वापस फेंकना चाहते हैं ताकि आप किसी फ़ाइल को लोड करने में विफलता से दूर हो सकें। क्लोनिंग या किसी और चीज में त्रुटि के कारण)। इसलिए हम आम तौर पर इस तरह से कुछ दानेदार जगह में एक अपवाद को निगलने के लिए नहीं चाहते हैं और फिर एक अशक्त, जैसे, कि अपवाद के मूल्य और उद्देश्य का एक बहुत कुछ हार जाएगा। इसके बजाय हम अपवादों को एक साइट पर वापस फैलाना चाहते हैं, जहाँ हम सार्थक रूप से निपट सकते हैं।
Objectपैरामीटर लेता है । यदिaवह वर्ग नहीं है जोcloneविधि का समर्थन करता है (या यह परिभाषित किया गया हैObject?) या यदिcloneविधि के दौरान कोई त्रुटि होती है (या कोई अन्य गलती जो मैं अभी नहीं सोच सकता हूं), तो एक अपवाद फेंका जा सकता है और आप पहुंच जाएंगे वापसी विवरण।