2010-06-03 11 views
60

सी # गुण (मैं और सेट तरीकों मतलब) एक बहुत ही उपयोगी सुविधा है। क्या जावा में सी # गुणों के समान कुछ भी है। मेरा मतलब है कि हम कैसे जावा में निम्नलिखित सी # कोड की तरह कुछ को लागू कर सकते हैं:जावा में सी # गुणों के समान कुछ है?

public string Name 
{ 
    get 
    { 
     return name; 
    } 

    set 
    { 
     name = value; 
    } 
} 

अग्रिम

+2

सी [getters/जावा में setters] (http://stackoverflow.com/questions/875033/getters-setters-in-java) –

+0

कोडपोर्टिंग सी # 2 जावा क्लाउड-ऐप भी देखें http://codeporting.com/blog/csharp-to-java-conversion/archive/2012/05/09/migrating-c-properties-to-java-using-codeporting- c2java.html जो सी # गुणों को स्वचालित रूप से जावा में अनुवाद करता है जबकि सी # कोड जावा पर पोर्ट किया जाता है। –

+0

असल में, आप प्राप्त करने और सेट उपसर्ग को छोड़ सकते हैं और उदाहरण के लिए गेटर और सार्वजनिक शून्य नाम (स्ट्रिंग वैल) {...} के लिए सार्वजनिक स्ट्रिंग नाम() {...} सेटर के लिए उपयोग कर सकते हैं। "सेट" और "मिल" पारंपरिक हैं लेकिन यह बहुत स्पष्ट है कि जब आप नाम लिखते हैं तो आप सेटिंग कर रहे हैं ("लेम") और स्ट्रिंग एन = नाम(); –

उत्तर

68

नहीं है, जावा तुल्यता नहीं है धन्यवाद। इसमें केवल गेटर और सेटर विधियों के लिए एक्सेसर और म्यूटेटर विधियां, फैंसी नाम हैं। उदाहरण के लिए:

public class User { 
    private String name; 

    public String getName() { return this.name; } 
    public void setName(String name) { this.name = name; } 
} 
+43

यह स्पष्ट होना चाहिए कि ये गेटर/सेटर विधियां चमकदार वाक्यविन्यास के साथ अलग-अलग संरचनाएं नहीं हैं जैसे गुण सी # में हैं।इसके बजाए, वे केवल सामान्य तरीके हैं जिन्हें हम getName() और setName() नाम देते हैं और समर्पित भाषा संरचनाओं के बजाय उन्हें सम्मेलन द्वारा गुणों के रूप में कार्य करने के साथ कार्य करते हैं। –

+3

सच है, getName() सेटनाम() को सम्मेलन द्वारा पूरी तरह से नामित किया गया है। कोई भी इन विधियों को नाम देने का निर्णय ले सकता है, उदाहरण के लिए, यूज़रनाम() और असाइन यूज़रनाम() असाइन करें, और यह ठीक होगा। इस प्रकार का सम्मेलन जावा में बेवकूफ़ है और ग्रहण आईडीई जैसे टूल का पालन करता है। –

+16

यह ** ** ** एक सम्मेलन नहीं है। जावा बीन्स और एक एपीआई के साथ जाने के लिए एक विनिर्देश है जो उन्हें उपयोगी बनाता है। http://java.sun.com/javase/technologies/desktop/javabeans/docs/spec.html –

3

आप केवल एक निजी चर घोषित कर सकते हैं, और हाथों से तरीकों को लिख सकते हैं। हालांकि, अगर आप ग्रहण का उपयोग कर रहे हैं, तो आप एक चर पर क्लिक कर सकते हैं, "स्रोत" चुनें और "getters और setters उत्पन्न करें।" यह सी # गुणों के रूप में सुविधाजनक है।

+0

नेटबीन भी ऐसी स्वचालित विधि पीढ़ी – Supuhstar

+3

प्रदान करता है, मैं नहीं कहूंगा कि यह सी # के रूप में सुविधाजनक है, क्योंकि मैं गुणों का नाम बदलता हूं और किसी संपत्ति के नाम को अपडेट करने के बजाय, मुझे दो विधियों और एक चर को अद्यतन करना होता है; – redsolo

24

आप Project Lombok पर एक नज़र के रूप में यह बॉयलर प्लेट जावा कोड लिखने से बाहर दर्द लेने की कोशिश करता हो सकता था। यह या तो आप @Getter और @Setter एनोटेशन का उपयोग करने की अनुमति देता है, जो getBlah() और setBlah() पद्धतियों प्रदान करेगा:

public class GetterSetterExample { 
    @Getter @Setter private int age = 10; 
} 

या फिर आप @Data उपयोग कर सकते हैं और यह अपने आप आपके hashCode को लागू करेगा(), के बराबर होती है(), toString() और गेटर तरीकों, गैर अंतिम खेतों पर setters के साथ:

@Data public class DataExample { 
    private String name; 
} 

समस्याएं मैं परियोजना के साथ मिल गया है, हालांकि, कर रहे हैं कि यह सब एक सा वूडू, जो बंद डाल हो सकता है , और आपको ऑटो संकलन को काम करने के लिए एक ग्रहण (या कभी भी) प्लगइन स्थापित करना होगा।

+10

और एक और समस्या यह है कि यदि आप लंबोक का उपयोग करते हैं, तो आप पोर्टेबल जावा कोड नहीं लिख रहे हैं। सी #: Thing.Number + = 1 जावा: Thing.setNumber (Thing.getNumber() +1) –

7

जावा में गुणों (और घटनाओं) के लिए सी # जैसे समर्थन जोड़ने का प्रस्ताव रहा है, लेकिन ऐसा लगता है कि यह जावा (जावा 7) के अगले संस्करण के लिए अस्वीकार कर दिया गया है।

देखें:

13

गुण हैं न केवल getters और setters एक इकाई में समाहित लेखन के संदर्भ में सुविधाजनक है, लेकिन यह भी वे बिंदु पर एक अच्छा वाक्य रचना प्रदान कॉल का

Window.Title = "New"; //which looks natural 

getters और setters साथ यह आम तौर पर है, जबकि

Window.setTitle("New"); 
+20

यह एक वेतन वृद्धि की तरह कुछ करने के लिए और भी बदतर है वाक्यविन्यास में –

+3

इस सवाल का जवाब नहीं है, लेकिन बजाय सिर्फ मतभेद का वर्णन करता है – Supuhstar

+0

ठीक है अगर आपने जावा में सार्वजनिक क्षेत्रों का उपयोग किया है तो आप विंडो के लिए सक्षम होंगे। टाइटल = "नया" जैसे सी # में - गुणों की आवश्यकता के बिना। मैंने सी # में उन बिंदुओं को कभी नहीं समझा, लेकिन मैं उन्हें वैसे भी उपयोग करता हूं क्योंकि वे सुविधाजनक हैं। – ozzy432836

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