2013-07-15 16 views
6

अभी मैं कक्षाओं का एक भार बना रहा हूं जो मेरी कॉन्फ़िगरेशन रखेगा और यही वह है। मैं बस विन्यास फाइल से मूल्यों को स्टोर करता हूं।अंतिम चर के लिए गेटर्स

आधे से अधिक कोड गेटर्स हैं और मैं सोच रहा हूं कि अभ्यास अभी भी गेटर्स है या सीधे चर का उपयोग कर रहा है या नहीं।

तो यह:

public myClass 
{ 
    public myClass(String name) 
    { 
     this.name = name; 
    } 

    final String name; 

    public final String getName() 
    { 
     return name; 
    } 
} 

या:

public myClass 
{ 
    public myClass(String name) 
    { 
     this.name = name; 
    } 

    public final String name; 
} 

यह वास्तव में सभी टिककर खेल है, जब वे वास्तव में कुछ भी नहीं कर रहे हैं, लेकिन चर वापस जाने के लिए मूर्खतापूर्ण लगता है। लेकिन मुझे बताया गया है कि वैसे भी गेटटर रखने के लिए यह सामान्य जावा अभ्यास है।

+1

कंपाइलर वैसे भी इनलाइन करेगा। हालांकि मैं जो कर रहा हूं उसके लिए मैं 'java.util.Properties' का उपयोग करूंगा। – jlordo

+2

अंतिम चर के साथ, यह मूर्खतापूर्ण लग सकता है, लेकिन यदि आपके पास गैर-अंतिम चर और उप-वर्ग के समान वैरिएबल नाम परिभाषित हैं, और आप इन चरों तक पहुंचने का प्रयास करते हैं, तो आप देखेंगे कि यह बिना किसी सेट/सेट के कितना भ्रमित होगा। उचित encapsulation हमेशा सर्वोत्तम अभ्यास है। – kosa

+0

@jlordo यह एक बहुत ही सरल उदाहरण था जो मैं दे रहा था। 'प्रॉपर्टीज 'मैं जो कर रहा हूं उसके लिए उपयुक्त नहीं है :) – Cheetah

उत्तर

11

ही टिककर खेल के साथ डेटा encapsulating कई फायदे प्रदान कर सकते हैं, जिनमें शामिल हैं:

  • आप, कुछ अन्य प्रतिनिधित्व करने के लिए क्षेत्र को बदल सकते हैं कॉल को प्रभावित किए बिना।
  • आप गेटर में अतिरिक्त कोड जोड़ सकते हैं।
  • आप एक इंटरफ़ेस को कार्यान्वित कर सकते हैं जो गेटर्स प्रदान करता है।
  • आप फ़ील्ड में केवल पढ़ने के लिए पहुंच प्रदान कर सकते हैं भले ही वे final नहीं थे।
+1

ऐसा करने का सबसे महत्वपूर्ण कारण [युग्मन] (http://en.wikipedia.org/wiki/Coupling_%28computer_programming%29) है जिसे आपने अपने उत्तर में समझाया था। –

+0

@LuiggiMendoza क्या आप गेटर्स/सेटर्स के संबंध में युग्मन को और समझा सकते हैं? –

+2

कक्षा के प्रतिनिधित्व के लिए अधिक कोड जोड़े होने से यह उस प्रतिनिधित्व को बदलने के लिए और अधिक काम करता है। Encapsulation एक इंटरफेस के पीछे आंतरिक प्रतिनिधित्व छुपाता है, जो प्रतिनिधित्व में परिवर्तन के रूप में स्थिर रह सकते हैं। –

0

अभ्यास मुझे पता है कि आप उदाहरण के लिए System.out की तरह, अपरिवर्तनीय प्रकार के साथ सार्वजनिक स्थिर अंतिम क्षेत्रों का उपयोग कर सकते है। मैं उदाहरण फ़ील्ड पर गेटर्स जोड़ता हूं।

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

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