मैंने जो कुछ कोड लिखा है, उसके माध्यम से ब्राउज़ करते हुए, मैं निम्नलिखित निर्माण पर आया जो मुझे मिला। पहली नज़र में, यह काफी साफ लगता है। हां, वास्तविक कोड में getLocation()
विधि का थोड़ा अधिक विशिष्ट नाम है जो बेहतर वर्णन करता है कि यह किस स्थान पर है।
service.setLocation(this.configuration.getLocation().toString());
इस मामले में, service
विधि के भीतर घोषित एक ज्ञात प्रकार का एक उदाहरण चर है। this.configuration
क्लास कंस्ट्रक्टर में पास होने से आता है, और एक विशिष्ट इंटरफ़ेस को लागू करने वाले क्लास का एक उदाहरण है (जो एक सार्वजनिक getLocation()
पद्धति को अनिवार्य करता है )। इसलिए, अभिव्यक्ति this.configuration.getLocation()
का वापसी प्रकार ज्ञात है; विशेष रूप से इस मामले में, यह एक है java.net.URL
, जबकि service.setLocation()
एक चाहता है String
। चूंकि दो प्रकार के स्ट्रिंग और URL सीधे संगत नहीं हैं, इसलिए गोल छेद में वर्गाकार खूंटी को फिट करने के लिए किसी प्रकार के रूपांतरण की आवश्यकता होती है।
हालांकि , स्वच्छ संहिता में उद्धृत विधि के कानून के अनुसार, क्लास सी में एक विधि च को केवल सी पर तरीकों को कॉल करना चाहिए , जिन वस्तुओं को बनाया गया है या जिन्हें च के लिए तर्क के रूप में पारित किया गया है और सी के उदाहरण चर में रखी गई वस्तुएं हैं । इससे परे कुछ भी ( ऊपर मेरे विशेष मामले में अंतिम , जब तक कि आप विधि मंगलाचरण के परिणामस्वरूप बनाई गई एक अस्थायी वस्तु पर विचार नहीं करते हैं, जिस स्थिति में पूरा कानून मूक प्रतीत होता है) अस्वीकृत है।toString()
क्या कोई मान्य तर्क है कि ऊपर की तरह एक कॉल, सूचीबद्ध बाधाओं को देखते हुए, हतोत्साहित या अस्वीकृत भी किया जाना चाहिए? या मैं सिर्फ अत्यधिक नाइटी हूं?
अगर मैं एक ऐसी विधि लागू करने वाला था, URLToString()
जो toString()
किसी URL
ऑब्जेक्ट पर कॉल करता है (जैसे कि उसके द्वारा लौटाया गया getLocation()
) एक पैरामीटर के रूप में उसके पास जाता है, और परिणाम देता है, तो मैं getLocation()
कॉल को उसी परिणाम को प्राप्त करने के लिए लपेट सकता हूं ; प्रभावी रूप से, मैं सिर्फ रूपांतरण को एक कदम आगे बढ़ाऊंगा। क्या यह किसी तरह स्वीकार्य होगा? ( मुझे ऐसा लगता है, सहज रूप से, कि इसे किसी भी तरह से कोई फर्क नहीं पड़ना चाहिए, क्योंकि यह सब चीजों को थोड़ा-बहुत घुमाता है। हालांकि, कानून के कानून के पत्र के रूप में उद्धृत किया गया है, यह स्वीकार्य होगा, क्योंकि मैं। फिर एक फंक्शन के लिए एक पैरामीटर पर सीधे काम करेगा।)
क्या इससे कोई फर्क पड़ेगा अगर यह toString()
मानक प्रकार पर कॉल करने की तुलना में कुछ अधिक विदेशी था ?
उत्तर देते समय, इस बात का ध्यान रखें कि service
चर के व्यवहार या एपीआई को परिवर्तित करना व्यावहारिक नहीं है। इसके अलावा, तर्क के लिए, मान लें कि रिटर्न प्रकार को बदलना getLocation()
भी अव्यावहारिक है।