यदि आप पहले से ही जावा में रिकॉर्ड्स जानते हैं, तो आपको इसका उपयोग कक्षाओं के समान ही मिल सकता है, लेकिन इसमें महत्वपूर्ण अंतर हैं जिन्हें ध्यान में रखा जाना चाहिए। इस लेख में हम जावा में records और classes के बीच अंतर देखने जा रहे हैं। यदि आप अभी भी रिकॉर्ड्स नहीं जानते हैं तो मैं मेरी पोस्ट जावा में रिकॉर्ड्स पढ़ने की सलाह देता हूं: वे क्या हैं और उनका उपयोग कैसे करें।
एक अपरिवर्तनीय वस्तु वह है जिसकी विशेषताओं को एक बार वस्तु बनाने के बाद संशोधित नहीं किया जा सकता है। रिकॉर्ड्स के मामले में, ये अपरिवर्तनीय हैं, यानी, एक बार रिकॉर्ड प्रकार का ऑब्जेक्ट बनाया गया है, तो इसकी विशेषताओं को संशोधित नहीं किया जा सकता है। दूसरी ओर, कोई वर्ग अपरिवर्तनीय हो भी सकता है और नहीं भी, यह इस बात पर निर्भर करता है कि इसे कैसे कार्यान्वित किया जाता है। यह भाग डेटा की अखंडता सुनिश्चित करता है और इसे गलती से संशोधित होने से रोकता है।
कक्षाएं आमतौर पर केवल डेटा संग्रहीत करने के लिए लिखी जाती हैं, जैसे कि डेटाबेस क्वेरी से, या किसी फॉर्म से डेटा। कई मामलों में, यह डेटा अपरिवर्तनीय है, क्योंकि सिंक्रोनाइज़ेशन का उपयोग किए बिना डेटा की वैधता सुनिश्चित करने की आवश्यकता होती है। इसे प्राप्त करने के लिए, निम्नलिखित तत्वों के साथ एक वर्ग लिखा गया है:
उदाहरण के लिए, यदि आपके पास दो विशेषताओं नाम और अंतिम नाम वाला एक व्यक्ति वर्ग है, तो आप इसे इस प्रकार लिख सकते हैं:
public class Person { private final String name; private final String lastName; public Person(String name, String lastName) { this.name = name; this.lastName = lastName; } public String getName() { return name; } public String getLastName() { return lastName; } @Override public String toString() { return "Person{" "name='" name '\'' ", lastName='" lastName '\'' '}'; } @Override public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof Person person)) return false; return Objects.equals(getName(), person.getName()) && Objects.equals(getLastName(), person.getLastName()); } @Override public int hashCode() { return Objects.hash(getName(), getLastName()); } }
यह कार्य का एक समाधान है, लेकिन वास्तव में जिस चीज़ की आवश्यकता है उसके लिए यह बहुत सारा कोड है। यदि क्लास में अधिक विशेषताएँ होतीं, तो यह लिखने के लिए और भी लंबा कोड होता, भले ही इसे IDE या GitHub Copilot जैसे प्लगइन की मदद से किया जाता। एक बेहतर समाधान यह होगा कि हम अपनी कक्षा को डेटा-क्लास के रूप में घोषित करें, अर्थात, एक ऐसा वर्ग जो केवल डेटा संग्रहीत करता है, और इसका कोई विशिष्ट व्यवहार नहीं होता है, और यहीं पर रिकॉर्ड आते हैं।
इस तरह व्यक्ति वर्ग को रिकॉर्ड के रूप में निम्नानुसार फिर से लिखा जा सकता है:
public record Person(String name, String lastName) { }
यह स्वचालित रूप से प्रत्येक विशेषता के लिए बराबर, हैशकोड और टूस्ट्रिंग विधियां, साथ ही गेटर विधियां उत्पन्न करता है।
यदि डेटा को संग्रहीत करने के लिए एक अपरिवर्तनीय डेटा संरचना की आवश्यकता है और विशेषताओं में कोई संशोधन करने की आवश्यकता नहीं है (इसे केवल जानकारी ले जाने के लिए एक वस्तु के रूप में देखा जाता है)। दूसरी ओर, यदि आपको अधिक सामान्य संरचना की आवश्यकता है जिसमें अद्वितीय तर्क और विशिष्ट विधियां हों, ऑब्जेक्ट-ओरिएंटेड प्रतिमान के लिए एक दृष्टिकोण हो, डिज़ाइन पैटर्न लागू करना हो, या जेपीए या हाइबरनेट के साथ काम करना आदि हो, तो आपको क्लास का उपयोग करना चाहिए।
आइए निम्नलिखित उदाहरण पर विचार करें, विशेषता नाम और कीमत के साथ दो रिकॉर्ड उत्पाद हैं, और ArrayList
package org.jordi.example; public record Product(String name, double price) { }
package org.jordi.example; import java.util.ArrayList; import java.util.List; public record Cart(Listproducts) { public Cart() { this(new ArrayList()); } public int getQuantity() { return this.products.size(); } public double getTotal() { return this.products.stream().mapToDouble(Product::price).sum(); } }
इस मामले में मुद्दा यह है कि प्रत्येक रिकॉर्ड अपने आप में अपरिवर्तनीय है, लेकिन रिकॉर्ड कार्ट के मामले में ArrayList प्रकार की विशेषता होने के कारण और चूंकि स्वभाव से एक ArrayList परिवर्तनशील है , रिकॉर्ड कार्ट चालू होने के बाद आप सूची की सामग्री को संशोधित कर सकते हैं।
package org.jordi.example; public class Main { public static void main(String[] args) { Product water = new Product("Water", 15); Product milk = new Product("Milk", 22); Cart cart = new Cart(); cart.products().add(water); cart.products().add(milk); System.out.println("Price: " cart.getTotal()); cart.products().clear(); System.out.println("Quantity: " cart.getQuantity()); System.out.println("Price: " cart.getTotal()); } }
उपरोक्त कोड बिना किसी समस्या के संकलित होता है, क्योंकि केवल सूची की सामग्री को संशोधित किया जा रहा है, लेकिन उत्पादों की विशेषता को संशोधित नहीं किया जा रहा है। यह किसी विशेष मामले के लिए केवल एक उदाहरण है, जो संभवतः आवश्यक नहीं है, लेकिन यह जानना अच्छा है कि यह किया जा सकता है।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3