2011-02-08 25 views
53

मैं वर्तमान में सैम द्वारा प्रकाशित "24 घंटे में टीच स्वयं एंड्रॉइड एप्लिकेशन डेवलपमेंट" पुस्तक के माध्यम से अपना रास्ता काम कर रहा हूं। मैं जावा, एंड्रॉइड या अन्यथा अपेक्षाकृत नया हूं। मेरे पास एक्शनस्क्रिप्ट 3 में एक बहुत ही ठोस पृष्ठभूमि है, जिसमें जावा के साथ पर्याप्त समानताएं हैं कि भाषा को समझना मुश्किल नहीं है, लेकिन मुझे अभी भी पुस्तक में कुछ कोड नमूने के पीछे तर्क के बारे में कुछ प्रश्न हैं। उदाहरण के लिए, यहाँ एक समारोह है कि घंटे 9 के लिए नमूना कोड के साथ आता है:फ़ंक्शन तर्क को अंतिम क्यों घोषित करें?

private void processScores(final TableLayout scoreTable, 
     XmlResourceParser scores) throws IOException, XmlPullParserException{ 

इस समारोह हस्ताक्षर में, लेखकों अंतिम रूप scoreTable तर्क घोषित किया है। मैं थोड़ा परेशान हूं कि उन्होंने ऐसा क्यों किया। यह फ़ंक्शन तर्क स्कोर के लिए एक नया मान असाइन करने का प्रयास करने के लिए भी मेरे दिमाग को पार नहीं करेगा (इसे एक्शनस्क्रिप्ट में एक खराब अभ्यास माना जाता है)। इसके अलावा, मैंने वास्तव में किसी भी वास्तविक दुनिया जावा में ऐसा नहीं देखा है जिसे मैंने एएस 3 में जांच या पोर्ट किया है।

क्या एंड्रॉइड विकास के बारे में कुछ विशिष्ट है जो कभी-कभी कुछ फ़ंक्शन तर्कों को अंतिम रूप देने की आवश्यकता बनाता है?

टेबललाउट ऑब्जेक्ट अंतिम क्यों घोषित किया गया है, लेकिन XmlResourceParser नहीं है?

+0

डुप्पे - http://stackoverflow.com/questions/4162531/making-java-method-arguments-as-final – Robino

उत्तर

84

दो मुख्य कारण हैं जो आप final पर तर्क को चिह्नित करना चाहते हैं। सबसे पहले, यदि आप किसी अज्ञात आंतरिक कक्षा में तर्क का उपयोग करने की योजना बना रहे हैं, तो आपको इसे final पर चिह्नित करना होगा ताकि इसे उस कक्षा में संदर्भित किया जा सके। अंतिम रूप से तर्कों को चिह्नित करने के लिए यह वास्तव में एक बहुत ही सामान्य उपयोग केस है।

तर्क final को चिह्नित करने का अन्य सामान्य कारण है कि आप उन्हें गलती से ओवरराइट करने से रोकें। यदि आप वास्तव में तर्कों को बदलना नहीं चाहते हैं, तो शायद आप उन्हें final चिह्नित करें ताकि यदि आप वास्तव में करते हैं, तो आपको रनटाइम पर पता लगाने के बजाय संकलन-समय पर त्रुटि मिल जाएगी कि आपके कोड में एक बग है ।

+0

धन्यवाद, मुझे अज्ञात आंतरिक कक्षाओं के संबंध में निश्चित रूप से यह आवश्यकता नहीं पता था। तो फिर इस तथ्य के आधार पर अनुमान लगाना सुरक्षित होगा कि केवल टेबललाउट ऑब्जेक्ट को अंतिम घोषित किया गया है कि यह फ़ंक्शन लापरवाही कोडिंग के खिलाफ एक गार्ड के रूप में सख्ती से इसका उपयोग कर रहा है? XmlResourceParser की तुलना में इस मामले में यह और अधिक विशेष क्यों होगा? या ये केवल प्रश्न हैं कि पुस्तक लेखकों को जवाब पता हो सकता है? – scriptocalypse

+0

@ scriptocalypse- आप जानते हैं, मुझे यकीन नहीं है। मुझे लगता है कि यह अनाम आंतरिक कक्षा के मामले के लिए है, अन्यथा आप सही हैं और यह दोनों को अंतिम रूप से चिह्नित करने के लिए और अधिक समझ में आता है। मैं लेखकों के लिए बात नहीं कर सकता, हालांकि; शायद आप उनसे या प्रकाशक से संपर्क कर सकते हैं? – templatetypedef

+4

वास्तव में 'अज्ञात आंतरिक वर्ग केस' स्वयं ही एक बहुत अच्छा कारण है। एंड्रॉइड में मैं अक्सर 'ऑनक्लिक लिस्टनर' और 'असिनक टास्क' कक्षाओं का उपयोग करके खुद को ढूंढता हूं और इन चरों को फिर से उपयोग करने की क्षमता आसानी से काम करता है। समीक्षा के लिए एक और लिंक: http://developer.android.com/guide/practices/design/performance.html#myths। –

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