मैं जावा में नया हूं, और मैं कुछ क्लास वेरिएबल्स बनाना चाहता हूं जिन्हें गतिशील रूप से गणना के दौरान गणना की जाती है, जैसा कि आप प्रॉपर्टी() विधि का उपयोग कर पाइथन में कर सकते हैं। हालांकि, मुझे सच में यकीन नहीं है कि इसका वर्णन कैसे किया जाए, इसलिए गूगलिंग मुझे जावा "प्रॉपर्टी" कक्षा के बारे में बहुत कुछ दिखाता है, लेकिन यह वही बात प्रतीत नहीं होता है। पाइथन की संपत्ति() के बराबर जावा क्या है?पायथन की संपत्ति() के जावा समतुल्य क्या है?
उत्तर
जावा भाषा में ऐसी कोई सुविधा नहीं बनाई गई है। आपको अपने आप से सभी गेटर्स और सेटर्स को स्पष्ट रूप से लिखना होगा। ग्रहण जैसे आईडीई हालांकि आपके लिए इस बॉयलरप्लेट कोड उत्पन्न कर सकते हैं।
उदाहरण के लिए:
class Point{
private int x, y;
public Point(int x, int y){
this.x = x;
this.y = y;
}
public void setX(int x){
this.x = x;
}
public int getX(){
return x;
}
public void setY(int y){
this.y = y;
}
public int getY(){
return y;
}
}
आप Project Lombok जो एनोटेशन @Getter
और @Setter
कि कुछ हद तक पायथन के property
के समान हैं प्रदान करता है पर एक नजर है सकते हैं।
लंबोक के साथ, ऊपर के उदाहरण कम कर देता है के लिए:
class Point{
@Getter @Setter private int x, y;
public Point(int x, int y){
this.x = x;
this.y = y;
}
}
यह करीब है लेकिन फिर भी जब कोई संपत्ति (जो किसी विशेषता की तरह उपयोग की जाती है) में परिवर्तन करने के लिए डायनामिक विधियों का आह्वान करने की अनुमति नहीं होती है। यहां कुछ पायथन कोड हैं जो कई अन्य ऑब्जेक्ट विशेषताओं को समायोजित करते हैं, बस यूरी को 'सेटिंग' खरीदते हैं: https://bitbucket.org/russellballestrini/miniuri/src/tip/miniuri.py –
आप ऊपर दिखाए गए कन्स्ट्रक्टर को परिभाषित करने से छुटकारा पा सकते हैं @AllArgsConstructor का उपयोग करके। – Nik
क्या आप कक्षा में नए फ़ील्ड/गेटर्स/सेटर्स बनाना चाहते हैं? यदि आप रनटाइम में ऐसा करना चाहते हैं, तो आपको अपने फ़ील्ड और विधियों के साथ पूरी तरह से नई कक्षा बनाना होगा, और इसे JVM में लोड करना होगा। नई कक्षा बनाने के लिए आप एएसएम या सीजीएलआईबी जैसी लाइब्रेरी का उपयोग कर सकते हैं, लेकिन यदि आप जावा के लिए नए हैं, तो यह ऐसा कुछ नहीं है जिसे आप शुरू करना चाहते हैं।
वे वास्तव में नहीं है मौजूद हैं। जावा में सदस्यों को private
या protected
के रूप में घोषित करना आम है और केवल विधियों के माध्यम से उन्हें एक्सेस करने की अनुमति देता है। अक्सर यह बहुत छोटे getFoo()
और setFoo(newFoo)
विधियों की ओर जाता है। पायथन में वास्तव में private
और protected
नहीं है और सदस्यों के लिए सीधे पहुंच की अनुमति देना अधिक आम है।
जैसा कि अन्य ने ध्यान दिया है, जावा के पास गेटर्स और सेटर्स हैं, लेकिन कोई सख्त एनालॉगन नहीं है। Project Lombok नामक एक थर्ड पार्टी लाइब्रेरी है जो कॉमाइल समय पर .class फ़ाइलों में गेटर्स और सेटर्स जेनरेट करने के लिए एनोटेशन का उपयोग करती है। इसका उपयोग चीजों को थोड़ा कम वर्बोज़ बनाने के लिए किया जा सकता है।
-1, जब आपके पास जोड़ने के लिए कुछ नया नहीं है, तो आपको पहले से मौजूद उत्तरों को ऊपर उठाना चाहिए। –
मेरा जोड़ा परियोजना लंबोक को इंगित कर रहा था। ग्रेमेटर 9.0 ने बाद में इसे शामिल करने के लिए अपना जवाब संपादित किया। –
बेवकूफ आरोप मत बनाओ। मेरे उत्तर का संपादन समय (13:18) आपके उत्तर के पोस्टिंग समय से पहले है (13:33)। – missingfaktor
असल में आप जावा में इस व्यवहार को अनुकरण कर सकते हैं।
चेतावनी:
public Object getProperty(String property, Object obj) {
if (obj != null && property != null) {
Field field = obj.getClass().getDeclaredField(property);
field.setAccessible(true);
try {
return field.get(obj);
} catch (Exception ex) {
return null;
}
}
return null;
}
आप वास्तव में यह एक स्थिर पद्धति के रूप में घोषित कर सकता है और उसके बाद सिर्फ इस आयात: नीचे
बदसूरत समाधान आप नीचे दिए गए कोड की तरह एक उपयोगिता कक्षा में एक विधि लिख सकते हैं अपनी कक्षाओं में विधि जो इस व्यवहार की आवश्यकता होगी।
वैसे, ग्रोवी इस सुविधा का समर्थन करते हैं।
कृपया मेरी पोस्ट को और अधिक बारीकी से पढ़ें। मैं इंस्टेंस सदस्यों तक पहुंचने के लिए एक फ़ंक्शन की तलाश नहीं कर रहा था। मैं एक ऐसी सुविधा की तलाश में था जो एक समारोह को कॉल करता है जब मैं एक इंस्टेंस सदस्य का संदर्भ देता हूं। उदा। myobj.attribute = 123; वास्तव में करेगा: myobj.setAttribute (123); – Cerin
बिल्ट-इन प्रॉपर्टी() फ़ंक्शन वास्तव में उत्तरों में वर्णित वर्णन के विपरीत है। यह सदस्य चर के लिए गेटर्स और सेटर्स उत्पन्न करने के बारे में नहीं है। यह आपको किसी संपत्ति तक पहुंचने के लिए एक विधि कॉल करने की अनुमति देता है (इसलिए, हालांकि आप केवल ते पायथन कक्षा में एक चर का उपयोग करते हैं, एक फ़ंक्शन को कॉल किया जाएगा)। (this post यह बताता है कि इसका उपयोग कैसे और क्यों करें।)
यह कहा गया है, जावा इस तरह कुछ भी नहीं पेश करता है। और भी, जावा में संपत्ति का उपयोग निराश है। मुझे लगता है कि आप इसे ग्रोवी स्क्रिप्ट भाषा और मेटा जादू में कर सकते हैं।लेकिन मैं अपने सिर से यह नहीं जानता कि यह कैसे करें।
- 1. जावा: पायथन की सीमा (int, int) के समतुल्य?
- 2. क्या LINQ के लिए जावा समतुल्य है?
- 3. प्रतिबिंब के जावा समतुल्य।
- 4. जावा में फ़ाइल.सेपरेटर के समतुल्य सी # समतुल्य है
- 5. पायथन 3.2 में हेक्सडिजिस्ट के बराबर सी # समतुल्य क्या है?
- 6. जावा के स्थैतिक के स्मॉलटाक समतुल्य क्या है?
- 7. पर्ल के qq ऑपरेटर के जावा समतुल्य क्या है?
- 8. सी ++ के टेम्पलेट्स के जावा समतुल्य क्या है?
- 9. जावा के नंबरफॉर्मैट अपवाद के .NET समतुल्य क्या है?
- 10. जावा के स्ट्रिंग रीडर के लिए रूबी समतुल्य क्या है?
- 11. उद्देश्य-सी के NSDictionary के जावा समतुल्य क्या है?
- 12. पायथन - स्ट्रेटोटाइम समतुल्य?
- 13. क्या सी # के अमान्य ऑपरेशन अपवाद का जावा समतुल्य है?
- 14. .NET से AggregateException के जावा समतुल्य क्या है?
- 15. जावा इनवेरिएंट संस्कृति के समतुल्य
- 16. सी # जावा संसाधन के समतुल्य
- 17. एक TreeView के लिए IsSynchronizedWithCurrentItem संपत्ति (या समतुल्य) कहां है?
- 18. सी 11 में समतुल्य() समतुल्य क्या है?
- 19. क्या मिसा सी के लिए जावा समतुल्य है?
- 20. जावा में स्ट्रिंगबफर के .NET समतुल्य क्या है?
- 21. जावा दशमलव दशमलव के बराबर सी # समतुल्य क्या है?
- 22. निम्नलिखित सी # कोड के लिए जावा समतुल्य क्या है?
- 23. इंटरप्टेड एक्सेप्शन (जावा) के .NET समतुल्य क्या है?
- 24. जावा में @Deprecated के .NET समतुल्य क्या है?
- 25. जावा के लिए Yacc समतुल्य
- 26. जावा मानचित्र समतुल्य सी #
- 27. पायथन में बैश बैकटिक्स के समतुल्य
- 28. जावा में स्पिंटफ समतुल्य
- 29. क्या कोई पाइथन समाचार साइट है जो रूबीफ्लो के समतुल्य समतुल्य है?
- 30. जावा में .NET के वेब क्लाइंट और HttpWebRequest की समतुल्य?
प्रतिक्रियाओं के लिए धन्यवाद। बस स्पष्ट करने के लिए, मुझे पता है कि जावा आमतौर पर आपको गेटर्स और सेटर्स के माध्यम से सदस्यों तक पहुंचने के लिए प्रोत्साहित करता है। मेरा प्रश्न यह था कि जावा आपको किसी सदस्य (उदा। Obj.member) तक पहुंचने की अनुमति देता है, और दृश्यों के पीछे गेटर/सेटर को कॉल करता है, इसलिए x = obj.member वास्तव में x = obj.getMember() कर देगा। – Cerin