2011-01-13 18 views
14

अक्सर मुझे लगता है कि लोग स्पष्ट रूप से super() को उस वर्ग में बुलाते हैं जो स्पष्ट रूप से कुछ भी विस्तार नहीं करता है।क्या कक्षा में सुपर() को कॉल करना बुरा व्यवहार है जो कुछ भी नहीं बढ़ाता है?

public class Foo 
{ 
    public Foo() 
    { 
    super(); 

    //do other constructor stuff 
    } 
} 

अब मुझे पता है यह पूरी तरह से कानूनी है और अगर छोड़े गए कॉल संकलक द्वारा जोड़ा जाता है लेकिन मैं अभी भी अपने खराब व्यवहार का लगता है। जब भी मैं इसे देखता हूं तो मुझे आश्चर्य होता है कि प्रोग्रामर को विरासत की कुछ गलतफहमी है और तथ्य यह है कि सभी वर्ग Object का विस्तार करते हैं।

क्या मुझे इसे अपने कोडिंग मानकों/सर्वोत्तम अभ्यास में जोड़ना चाहिए और क्या मुझे अपनी टीम में अन्य देवताओं को खींचना चाहिए जब मैं उन्हें देखूं? यह मेरा निजी बग-भालू है लेकिन मुझे नहीं पता कि मैं सिर्फ पिकी हूं या नहीं।

उत्तर

17

जबकि मैं एक हूं जिसके सभी स्थिरता के लिए, मैं हर शैली की माइक्रोमैनेजिंग के खिलाफ भी हूं। कोडिंग सम्मेलनों की एक बड़ी सूची होने के कारण, विशेष रूप से जब उनमें से कुछ मनमाने ढंग से प्रतीत होते हैं, तो यह उन लोगों का हिस्सा है जो लोगों को उनका पालन करने से हतोत्साहित करते हैं। मुझे लगता है कि कोडिंग दिशानिर्देशों को सबसे मूल्यवान प्रथाओं के लिए सुव्यवस्थित किया जाना चाहिए जो क्षमताओं में सुधार करते हैं। इस अभ्यास को अनिवार्य करके पठनीयता, रखरखाव, प्रदर्शन इत्यादि में कितना सुधार हुआ है?

मेरी निजी व्यवहार इस तरह के एक मामले में super() कॉल करने के लिए, पर्याप्त इसके गंभीर नहीं है कि मैं यह कोडिंग के दिशा निर्देशों में शामिल होंगे या यह अन्य प्रोग्रामर का कोड की समीक्षा में एक दोष फोन नहीं है है। हालांकि, मैं अभी भी इसका उल्लेख करता हूं और पर कॉल करने के लिए अधिक इंजीनियरों को लॉबी करने के प्रयास में कोड समीक्षाओं (शैली के रूप में नहीं, बल्कि एक प्रश्न के रूप में) में चर्चा करता हूं।

+0

मुझे यह जवाब पसंद है, कोड समीक्षा शैली के बिंदु के रूप में इस मुद्दे को हल करने के लिए सबसे अच्छी जगह प्रतीत होती है, और प्रोग्रामर के किसी भी संभावित गलतफहमी को साफ़ करता है। – Qwerky

6

यह परोक्ष तो कोई इस

+4

डाउनवॉटर की टिप्पणी के लिए प्रतीक्षा –

+3

मैं नहीं पूछ रहा हूं कि मुझे इसे कॉल करने की आवश्यकता है, मैं पूछ रहा हूं कि यह बुरा अभ्यास है या नहीं। – Qwerky

+1

+1 - यह नहीं पता कि आपको किसने कम किया है, लेकिन मुझे लगता है कि आपका उत्तर सही है। –

8

जोड़ना कोड की जरूरत नहीं है कि हमेशा एक बुरा व्यवहार करने की जरूरत है कहा जाता हो जाएगा। यह कोड को कम पठनीय बनाएगा क्योंकि आपको रोकने की आवश्यकता होगी और यह सोचना शुरू होगा कि कोड की यह पंक्ति क्यों शामिल की गई है और यदि वास्तव में किसी कारण से है।

3

यह मुद्दा उठाया होने की जरूरत है, कि:

  • कॉलिंग super() पूरी तरह से व्यर्थ है, कोई फर्क नहीं पड़ता वर्ग कुछ भी या नहीं विरासत में अगर; यह सार्थक केवल है यदि आप बेस क्लास
  • के अंतर्निहित कन्स्ट्रक्टर को कॉल नहीं करते हैं तो प्रश्न होना चाहिए "क्या कुछ पूरी तरह से व्यर्थ खराब अभ्यास कर रहा है?"। उत्तर स्पष्ट है - हां!
1

स्पष्ट सुपर कन्स्ट्रक्टर कॉल अक्सर डिफ़ॉल्ट कोड जेनरेटर द्वारा डिफ़ॉल्ट रूप से जोड़ा जाता है, इसलिए यह हमेशा प्रोग्रामर खराब अभ्यास के बारे में नहीं होता है। या शायद संदिग्ध रूप से मूर्ख उत्पन्न कोड को छोड़ने का बुरा अभ्यास है।

ग्रहण विशेष रूप से इस सुपर कॉल (सुपरक्लास से कन्स्ट्रक्टर उत्पन्न करता है) उत्पन्न करता है, हालांकि, मुझे अन्य आईडीई पर अधिक अनुभव नहीं है। (टिप्पणियों में अपने अनुभव लिखें।) मेरा दूसरा 'पसंदीदा' डिफ़ॉल्ट जेनरेट कोड इंटरफेस 'विधि घोषणाएं:' सार्वजनिक सार 'है जो पूरी तरह से अनावश्यक है।

0

सुपर() कॉल जेडी डेवलपर द्वारा स्पष्ट रूप से जोड़ा जाता है। अपनी खुद की एक कक्षा लिखते समय, ऐसा करने की कोई आवश्यकता और उपयोगिता नहीं है।

+0

यह वास्तव में प्रश्न का उत्तर नहीं देता है और एक टिप्पणी के रूप में बेहतर होगा – dstarh

संबंधित मुद्दे

 संबंधित मुद्दे