के रूप में पारित ऑब्जेक्ट को संशोधित करती है या नहीं, मैं एक सी ++ पृष्ठभूमि से आया हूं और मैं वर्तमान में जावा सीख रहा हूं। एक प्रश्न तब उठ गया जब मैंने कुछ तीसरे पक्ष के पुस्तकालयों का उपयोग करने की कोशिश की। मैं कैसे निर्धारित करूं कि पैरामीटर के रूप में ऑब्जेक्ट संदर्भ लेने वाली विधि को कॉल ऑब्जेक्ट को संशोधित करता है या नहीं? सी ++ में यह कॉन्स कीवर्ड के उपयोग के लिए स्पष्ट धन्यवाद है। अगर विधि हस्ताक्षर है:यह निर्धारित करने के लिए कि जावा विधि पैरामीटर
void foo(Boo& boo);
मैं, पता है कि संदर्भित वस्तु संशोधित किया जा सकता है, जबकि यदि विधि हस्ताक्षर है:
void foo(const Boo& boo);
संकलक गारंटी देता है कि संदर्भित वस्तु संशोधित नहीं है।
मैंने जावा में कुछ समान नहीं देखा है, क्योंकि केवल संदर्भ ही अंतिम घोषित किया जा सकता है, संदर्भित वस्तु नहीं, और अंतिम तर्क पहली जगह में बहुत अधिक समझ में नहीं आता है क्योंकि यह वैसे भी मूल्य से गुजरता है । इसलिए, जब मैं इस तरह के रूप में एक विधि देखें:
void foo(Boo boo) {...}
किस तरह तय करते मैं अगर वस्तु बू द्वारा संदर्भित समारोह के शरीर के अंदर संशोधित किया गया है (शायद एनोटेशन का उपयोग)? अगर जानने का कोई तरीका नहीं है, तो भ्रम और बग से बचने के लिए कुछ व्यापक रूप से उपयोग किए जाने वाले सम्मेलन या कुछ सर्वोत्तम प्रथाएं हैं?
दस्तावेज़ों को पढ़ें। (आप C++ के सापेक्ष जावा में यह कमजोरी मान सकते हैं, लेकिन हम वास्तव में इसे याद नहीं करते हैं, सी ++ में काम करते समय आप चेक अपवादों को याद करते हैं।) – user2357112
सबसे अच्छा अभ्यास जहां संभव हो वहां उत्परिवर्तन से बचने के लिए है। यह सब कुछ के लिए जाता है, सिर्फ विधियों के लिए तर्क के लिए नहीं। – usr
@ user2357112 "* सी ++ में काम करते समय चेक अपवादों को याद करने से कहीं अधिक * * प्रोग्राम प्रवाह को नियंत्रित करने के लिए अपवादों का उपयोग करना एक त्रुटि है, असाधारण परिस्थितियों ** के लिए अपवाद (जैसा कि इसका नाम कहता है) है। एक भाषा सुविधा होने का एकमात्र उद्देश्य अपवादों का उपयोग करके त्रुटि से पुनर्प्राप्त करने में सक्षम होना है क्योंकि संचार चैनल "प्रवाह नियंत्रण के अपवाद" का एक और मामला है, जो राज्यों के ऊपर नियम के रूप में एक डिज़ाइन त्रुटि है। हम चेक अपवादों को याद नहीं करते हैं। – Manu343726