A record एक संरचना है जिसे अपरिवर्तनीय होने की विशेषता है, अर्थात, एक बार record प्रकार की एक वस्तु बनाई गई है। इसकी विशेषताओं को संशोधित नहीं किया जा सकता है, यह अन्य प्रोग्रामिंग भाषाओं को डेटा-क्लास या डीटीओ (डेटा ट्रांसफर ऑब्जेक्ट) के बराबर है। हालाँकि, यदि किसी विशेषता को सेटर विधि का उपयोग करके संशोधित करने की आवश्यकता है और यह मानते हुए कि रिकॉर्ड के भीतर प्रत्येक विशेषता अंतिम प्रकार की है, तो इसे कैसे प्राप्त किया जा सकता है?
यह दिखाने के लिए कि क्या यह संभव है, आइए एक रिकॉर्ड उत्पाद बनाएं जिसमें दो विशेषताएँ नाम और कीमत और संबंधित विधियाँ हैं जो जावा में रिकॉर्ड को परिभाषित करते समय स्वचालित रूप से बनाई जाती हैं:
public record Product(String name, double price) { }
अब, यदि आप उत्पाद प्रकार का एक ऑब्जेक्ट बनाते हैं और नाम विशेषता को संशोधित करने का प्रयास करते हैं, तो आप देख सकते हैं कि यह संभव नहीं है, और इसे करने के लिए कोई सेटर विधि भी नहीं है:
Product p = new Product("Bread", 1.0); p.setName("Water"); // Error: cannot resolve method 'setName' in 'Product'
लेकिन, अगर हम जानते हैं कि रिकॉर्ड में अतिरिक्त विधियां हो सकती हैं, तो हम एक सेटनाम (स्ट्रिंग नाम) विधि बना सकते हैं जो नाम विशेषता को संशोधित करती है और नया मान निर्दिष्ट करती है, क्योंकि उत्तर नहीं है, यह सामान्य कक्षा की तरह काम नहीं करता, उदाहरण के लिए:
public record Product(String name, double price) { // Error: cannot asign a value to final variable 'name' public void setName(String name) { this.name = name; } }
तो आप जावा में रिकॉर्ड की एक विशेषता को कैसे संशोधित कर सकते हैं? इसका उत्तर यह है कि यदि set विधि अपनी प्रत्येक विशेषता के साथ और स्पष्ट रूप से संशोधित विशेषता(विशेषताओं) के साथ रिकॉर्ड का एक नया उदाहरण लौटाती है तो ऐसा हो सकता है। रिकॉर्ड.
में मौजूद विशेषताओं की संख्या के आधार पर यह प्रक्रिया थोड़ी कठिन हो सकती है।
public record Product(String name, double price) { public Product setName(String name) { return new Product(name, this.price); } public Product setPrice(double price) { return new Product(this.name, price); } }
इस तरह, जब किसी भी सेटर तरीकों को लागू किया जाता है, तो संशोधित विशेषता के साथ उत्पाद प्रकार का एक नया उदाहरण प्राप्त किया जाएगा, उदाहरण के लिए:
Product p = new Product("Bread", 1.0); Product q = p.setName("Milk"); Product r = q.setPrice(2.0);
प्रत्येक ऑब्जेक्ट पी, क्यू और आर के लिए, इसके प्राप्त, बराबर, हैशकोड और टूस्ट्रिंग तरीकों को सामान्य रूप से लागू किया जा सकता है, यह मानते हुए कि कोई भी ऑब्जेक्ट दूसरे के बराबर नहीं है, क्योंकि प्रत्येक के पास अपनी विशेषताओं में एक अलग मूल्य है।
public class Main { public static void main(String[] args) { Product p = new Product("Bread", 1.0); Product q = p.setName("Milk"); Product r = q.setPrice(2.0); System.out.println(p); // Product[name=Bread, price=1.0] System.out.println(q); // Product[name=Milk, price=1.0] System.out.println(r); // Product[name=Milk, price=2.0] System.out.println(p.equals(q)); // false System.out.println(q.equals(r)); // false System.out.println(r.equals(p)); // false } }
इस बिंदु पर, यह विचार करना महत्वपूर्ण है कि क्या यह दृष्टिकोण समस्या को हल करने के लिए उपयुक्त है, यह देखते हुए कि एक रिकॉर्ड को एक संरचना के रूप में डिज़ाइन किया गया है जो जानकारी को सरल तरीके से संग्रहीत और परिवहन करने की अनुमति देता है किसी एप्लिकेशन के भीतर रास्ता और अपरिवर्तनीय होना, या यदि अधिक लचीलेपन वाली संरचना की आवश्यकता है, तो एक वर्ग का उपयोग किया जाना चाहिए। रिकॉर्ड या वर्ग का उपयोग कब करना है, इस बारे में अधिक जानकारी के लिए, आप निम्नलिखित पोस्ट देख सकते हैं।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3