टीएल; डीआर: ऐसा न करें।
आप यहाँ जो दिखाते हैं वह भंगुर कोड है।
एक इंटरफ़ेस एक अनुबंध है। यह कहता है कि "चाहे आपको कोई भी वस्तु मिल जाए, वह X और Y कर सकता है।" जैसा कि लिखा गया है, आपका इंटरफ़ेस न तो एक्स और न ही वाई करता है क्योंकि यह स्टैक ओवरफ्लो का कारण बनने की गारंटी है।
त्रुटि या उपवर्ग को फेंकना एक गंभीर त्रुटि को इंगित करता है जिसे पकड़ा नहीं जाना चाहिए:
एक त्रुटि थ्रोबल का एक उपवर्ग है जो गंभीर समस्याओं को इंगित करता है कि एक उचित अनुप्रयोग को पकड़ने की कोशिश नहीं करनी चाहिए।
इसके अलावा, VirtualMachineError , StackOverflowError के मूल वर्ग , यह कहते हैं:
यह इंगित करने के लिए फेंका गया कि जावा वर्चुअल मशीन टूट गई है या ऑपरेटिंग जारी रखने के लिए आवश्यक संसाधनों से बाहर चला गया है।
आपका कार्यक्रम JVM संसाधनों से संबंधित नहीं होना चाहिए । जेवीएम का काम यही है। एक प्रोग्राम बनाना जो सामान्य ऑपरेशन के एक हिस्से के रूप में एक जेवीएम त्रुटि का कारण बनता है, खराब है। यह या तो आपके प्रोग्राम के क्रैश होने की गारंटी देता है, या इस इंटरफ़ेस के उपयोगकर्ताओं को उन त्रुटियों को फंसाने के लिए मजबूर करता है, जिनके साथ संबंध नहीं होना चाहिए।
आप एरिक लिपर्ट को ऐसे प्रयासों से जान सकते हैं जैसे एमिरेट्स "सी # भाषा डिजाइन समिति का सदस्य।" वह भाषा की विशेषताओं के बारे में बात करता है जो लोगों को सफलता या असफलता की ओर धकेलती है: जबकि यह भाषा की विशेषता या भाषा डिजाइन का हिस्सा नहीं है, उनकी बात समान रूप से मान्य है जब यह इंटरफेस लागू करने या वस्तुओं का उपयोग करने की बात आती है।
आपको द प्रिंसेस ब्राइड में याद है जब वेस्टली उठती है और खुद को एक गड्ढे में बंद कर देती है और एक बुरा अल्बिनो और पापी छह उंगलियों वाले आदमी, काउंट रगीन के साथ? निराशा के एक गड्ढे का सिद्धांत विचार दुगुना है। सबसे पहले, कि यह एक गड्ढा है, और इसलिए इससे बाहर निकलने में मुश्किल लेकिन मुश्किल काम है। और दूसरा, यह निराशा पैदा करता है। इसलिए यह नाम।
स्रोत: सी ++ और निराशा के गड्ढे
StackOverflowError
डिफॉल्ट रूप से एक इंटरफेस थ्रो करने से डेपेयर के गड्ढे में डेवलपर्स को धक्का लगता है और यह बुरा विचार है । इसके बजाय, डेवलपर्स को सफलता के गड्ढे की ओर धकेलें । JVM को क्रैश किए बिना अपने इंटरफ़ेस को सही ढंग से उपयोग करना आसान बनाएं ।
तरीकों के बीच प्रतिनिधिमंडल यहाँ ठीक है। हालांकि, निर्भरता को एक तरह से जाना चाहिए। मैं निर्देशन ग्राफ की तरह विधि प्रतिनिधिमंडल के बारे में सोचना पसंद करता हूं । प्रत्येक विधि ग्राफ पर एक नोड है। जब भी कोई विधि किसी अन्य विधि को कॉल करती है, तो कॉलिंग विधि से कॉल की गई विधि के लिए एक किनारा खींचें।
यदि आप एक ग्राफ खींचते हैं और नोटिस करते हैं कि यह चक्रीय है, तो यह एक कोड गंध है। यह गड्ढे में निराशा के लिए डेवलपर्स को आगे बढ़ाने की क्षमता है। ध्यान दें कि यह स्पष्ट रूप से निषिद्ध नहीं होना चाहिए, केवल यह कि सावधानी का उपयोग करना चाहिए । पुनरावर्ती एल्गोरिदम में विशेष रूप से कॉल ग्राफ़ में चक्र होंगे: यह ठीक है। इसे दस्तावेज़ करें और डेवलपर्स को चेतावनी दें। यदि यह पुनरावर्ती नहीं है, तो उस चक्र को तोड़ने का प्रयास करें। यदि आप ऐसा नहीं कर सकते हैं, तो पता लगाएं कि क्या इनपुट एक स्टैक अतिप्रवाह का कारण बन सकते हैं और या तो उन्हें कम कर सकते हैं या इसे अंतिम मामले के रूप में दस्तावेज कर सकते हैं अगर कुछ और काम नहीं करेगा।