2013-02-07 10 views
5

मुझे किसी व्यक्ति द्वारा बताया गया था कि हमें एक वर्ग में किसी अन्य सार्वजनिक विधि से कक्षा की सार्वजनिक विधि नहीं बुलानी चाहिए। अब मैं इसे समझने में सक्षम नहीं हूं क्योंकि मुझे इसके साथ कोई समस्या नहीं दिख रही है। एक बार एक विधि को सार्वजनिक घोषित कर दिया गया है तो उसका अनुबंध जीवन भर के लिए तय किया गया है और इसलिए इसे किसी अन्य सार्वजनिक विधि से कॉल करने में कोई समस्या नहीं होनी चाहिए।हमें सार्वजनिक विधि को किसी अन्य सार्वजनिक से क्यों नहीं बुलाया जाना चाहिए?

तो मुझे यकीन नहीं है कि क्या यह कथन सत्य है या अन्य सार्वजनिक एपीआई से सार्वजनिक एपीआई को कॉल करना ठीक है [यह डिजाइन परिप्रेक्ष्य से है]?

+2

मैं पता नहीं क्यों अपने सवाल नीचे मतदान किया गया था, लेकिन उस व्यक्ति ने आपको क्या बताया ** कोई समझ नहीं आता **। – Augusto

+0

** तो मुझे यकीन नहीं है कि क्या यह कथन सत्य है या ठीक है ** अपने आप को एक छोटा परीक्षण करें, मुझे लगता है कि अगर आप अपना जवाब स्वयं प्राप्त करेंगे। – subodh

उत्तर

11

क्या आपके संकलक आपके प्रयास करते समय आपके ऊपर झुकते हैं? नहीं? फिर यह उस सम्मान में कानूनी है।

क्या यह व्यक्ति 'सलाह' प्रदान करने वाला व्यक्ति मानक (या तो उद्योग में या आपके संगठन में) समझाते हुए किसी भी कैननिकल दस्तावेज़ का उत्पादन करता है? नहीं? फिर यह राय है।

अपनी कंपनी के मानकों से परामर्श लें, लेकिन अन्यथा, मैं बकवास कहता हूं।

2

मुझे यकीन नहीं है कि उसका क्या मतलब है। आप स्पष्ट रूप से किसी अन्य सार्वजनिक विधि से सार्वजनिक विधि को कॉल कर सकते हैं। यह एक बुरा विचार नहीं है - यहां तक ​​कि जावा के स्रोत में विधियां भी हैं जिनमें एक सार्वजनिक विधि एक और सार्वजनिक विधि कहती है।

आप उस व्यक्ति से क्यों नहीं पूछते जिसने आपको कारण बताए जाने की सलाह दी? मुझे लगता है कि वह हमारे मुकाबले बताने की बेहतर स्थिति में है।

4

जब आप अक्सर एक ही कक्षा के अन्य सार्वजनिक तरीकों से सार्वजनिक तरीकों को कॉल करते हैं, तो शायद इसका मतलब है कि आपके पास अनावश्यक उपयोगिता विधियां हैं। और हो सकता है कि आपको थोड़ी अधिक डीआरवाई बनने की कोशिश करनी चाहिए ताकि रखरखाव को कम किया जा सके और आपके एपीआई को समझने में आसानी हो।

लेकिन यह सिर्फ एक चेतावनी है, यह किसी अन्य विधि से सार्वजनिक विधि को कॉल करने के लिए पूरी तरह से मान्य है, और आपको java.lang मानक कोड के कई उदाहरण मिलेंगे।

एक उदाहरण java.lang.String से:

1462 public boolean startsWith(String prefix) { 
1463  return startsWith(prefix, 0); 
1464 } 

सिर्फ अन्य सार्वजनिक तरीकों ना बुलाने की सार्वजनिक तरीकों के बारे में एक नियम लागू करने के लिए निजी कुछ तरीकों बनाने का कोई मतलब नहीं होगा।

0

बेशक आप किसी भी सार्वजनिक विधि से किसी भी सार्वजनिक विधि से कॉल कर सकते हैं चाहे वह एक ही कक्षा या किसी अन्य वर्ग के अंदर हो। लेकिन मानक विभिन्न संगठनों के लिए महत्वपूर्ण है। उसे कुछ मान्य उदाहरण दें।

6

यदि आप अन्य सार्वजनिक तरीकों से सार्वजनिक तरीकों को कॉल करते हैं तो यह इकाई परीक्षण को अधिक जटिल बनाता है। यदि एक विधि एक ही कक्षा के किसी अन्य तरीके पर निर्भर है तो आप इसे अलग से जांचने के लिए नकली नहीं कर सकते हैं। तो आपको एक ही विधि के लिए दो बार टेस्ट कोड लिखना पड़ सकता है।

मेरी राय में भी Unit testing a method that calls another method

0

देखते हैं कि आप विरासत की वजह से एक और तरीका के भीतर एक सार्वजनिक विधि कॉल से बचना चाहिए। वर्गों पर विचार करें:

public class Parent { 

    //return sum 
    public double getSum(double... value){ 
     //implementation 
    } 

    //return average 
    public double getAverage(int count){ 
     //call getSum 
     double sum = getSum(20, 40, 60); 
     return sum/count; 

    } 
} 

public class Child extends Parent { 

    @Override 
    public int getSum(double... obj){ 
     // change implementation 
     // always return 100; 
    } 
} 

आप बाल वस्तु getAverage विधि पर बुलाया, तो आप कुछ अप्रत्याशित मूल्य मिलेगा, बाल वस्तु के पूरे इंटरफ़ेस टूटी हुई है। आपको getAverage विधि को ओवरराइड करना होगा ...स्ट्रिंग वर्ग के साथ

उदाहरण

1462 public boolean startsWith(String prefix) { 
1463  return startsWith(prefix, 0); 
1464 } 

.. क्योंकि स्ट्रिंग, अंतिम है, तो आप इसे प्राप्त नहीं कर सकते हैं और इसकी जनता के तरीकों को ओवरराइड, इस परिप्रेक्ष्य गलत से है

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

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