वापसी अशक्त; यह आवश्यक है क्योंकि एक अपवाद को पकड़ा जा सकता है, हालांकि इस तरह के एक मामले में जब से हम पहले से ही जांच कर रहे थे कि क्या यह अशक्त था (और हमें लगता है कि हम उस वर्ग को जानते हैं जिसे हम क्लोनिंग का समर्थन करते हैं) तो हम जानते हैं कि कोशिश कथन कभी भी विफल नहीं होगा।
यदि आप ऐसे विवरणों के बारे में जानकारी जानते हैं, जिसमें आप जानते हैं कि 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
विधि के दौरान कोई त्रुटि होती है (या कोई अन्य गलती जो मैं अभी नहीं सोच सकता हूं), तो एक अपवाद फेंका जा सकता है और आप पहुंच जाएंगे वापसी विवरण।