Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Java

जावा में परिवर्तनीय वस्तु संदर्भों के साथ एक अपरिवर्तनीय वर्ग कैसे बनाएं?

अपरिवर्तनीय वस्तुएं वे वस्तुएँ हैं जिनकी अवस्थाएँ एक बार आरंभ होने के बाद नहीं बदली जा सकती हैं . कभी-कभी आवश्यकता के अनुसार अपरिवर्तनीय वर्ग बनाना आवश्यक होता है। उदाहरण के लिए, सभी आदिम आवरण वर्ग (इंटीजर, बाइट, लॉन्ग, फ्लोट, डबल, कैरेक्टर, बूलियन और शॉर्ट) जावा में अपरिवर्तनीय हैं। स्ट्रिंग वर्ग एक अपरिवर्तनीय वर्ग भी है।

कस्टम अपरिवर्तनीय वर्ग बनाने के लिए हमें निम्नलिखित चरण करने होंगे

  • कक्षा को अंतिम के रूप में घोषित करें इसलिए इसे बढ़ाया नहीं जा सकता।
  • सभी फ़ील्ड को निजी बनाएं ताकि सीधी पहुंच की अनुमति न हो।
  • सेटर विधियां प्रदान न करें (विधियाँ जो फ़ील्ड को संशोधित करती हैं) चर के लिए, ताकि इसे सेट न किया जा सके।
  • सभी परिवर्तनीय फ़ील्ड को अंतिम बनाएं ताकि उनके मान केवल एक बार असाइन किए जा सकें।
  • एक कन्स्ट्रक्टर . के माध्यम से सभी फ़ील्ड प्रारंभ करें डीप कॉपी कर रहा हूँ।
  • वस्तुओं की क्लोनिंग करें वास्तविक वस्तु संदर्भ को वापस करने के बजाय एक प्रति वापस करने के लिए गेट्टर विधियों में।
  • यदि इंस्टेंस फ़ील्ड में म्यूटेबल ऑब्जेक्ट्स के संदर्भ शामिल हैं , उन वस्तुओं को बदलने की अनुमति न दें
  • ऐसी विधियां प्रदान न करें जो परिवर्तनीय . को संशोधित करती हैं वस्तुएं
  • साझा न करें संदर्भ परिवर्तनीय वस्तुओं के लिए . कंस्ट्रक्टर को पास की गई बाहरी, परिवर्तनशील वस्तुओं के संदर्भों को कभी भी संग्रहीत न करें। यदि आवश्यक हो, तो प्रतियां बनाएं और प्रतियों के संदर्भ संग्रहीत करें। इसी तरह, जब आवश्यक हो तो हमारे आंतरिक परिवर्तनशील वस्तुओं की प्रतियां बनाएं ताकि मूल को हमारे तरीकों से वापस न किया जा सके।

उदाहरण

// Employee.java
final class Employee {
   private final String empName;
   private final int age;
   private final Address address;
   public Employee(String name, int age, Address address) {
      super();
      this.empName = name;
      this.age = age;
      this.address = address;
   }
   public String getEmpName() {
      return empName;
   }
   public int getAge() {
      return age;
   }
   /* public Address getAddress() {
      return address;
      }
   */
   public Address getAddress() throws CloneNotSupportedException {
      return (Address) address.clone();
   }
}
// Address.java
class Address implements Cloneable {
   public String addressType;
   public String address;
   public String city;
   public Address(String addressType, String address, String city) {
      super();
      this.addressType = addressType;
      this.address = address;
      this.city = city;
   }
   public String getAddressType() {
      return addressType;
   }
   public void setAddressType(String addressType) {
      this.addressType = addressType;
   }
   public String getAddress() {
      return address;
   }
   public void setAddress(String address) {
      this.address = address;
   }
   public String getCity() {
      return city;
   }
   public void setCity(String city) {
      this.city = city;
   }
   public Object clone() throws CloneNotSupportedException {
      return super.clone();
   }

   @Override
   public String toString() {
      return "Address Type - "+addressType+", address - "+address+", city - "+city;
   }
}
// MainClass.java
public class MainClass {
   public static void main(String[] args) throws Exception {
      Employee emp = new Employee("Adithya", 34, new Address("Home", "Madhapur", "Hyderabad"));
      Address address = emp.getAddress();
      System.out.println(address);
      address.setAddress("Hi-tech City");
      address.setAddressType("Office");
      address.setCity("Hyderabad");
      System.out.println(emp.getAddress());
   }
}

उपरोक्त उदाहरण में, मूल पता . को वापस करने के बजाय ऑब्जेक्ट हम एक डीप क्लोन कॉपी लौटाएंगे उस उदाहरण के। पता वर्ग को क्लोनेबल . को लागू करना होगा इंटरफ़ेस।

आउटपुट

Address Type - Home, address - Madhapur, city - Hyderabad
Address Type - Home, address - Madhapur, city - Hyderabad

  1. जावा में स्ट्रिंग को इनपुटस्ट्रीम ऑब्जेक्ट में कैसे परिवर्तित करें?

    एक ByteArrayInputStream इनपुटस्ट्रीम . का उपवर्ग है वर्ग और इसमें एक आंतरिक बफर होता है जिसमें बाइट्स . होता है जिसे धारा से पढ़ा जा सकता है। हम स्ट्रिंग को इनपुटस्ट्रीम में बदल सकते हैं ByteArrayInputStream . का उपयोग करके ऑब्जेक्ट करें कक्षा। यह क्लास कंस्ट्रक्टर स्ट्रिंग बाइट ऐरे लेता है जिसे

  1. जावा में अज्ञात वर्ग का उपयोग करके धागा कैसे बनाएं?

    एक धागा एक कार्यक्षमता है जिसे कार्यक्रम के दूसरे भाग के साथ एक साथ निष्पादित किया जा सकता है। सभी जावा प्रोग्राम में कम से कम एक थ्रेड होता है, जिसे मुख्य थ्रेड के रूप में जाना जाता है, जिसे जावा वर्चुअल मशीन (JVM) द्वारा बनाया गया है। कार्यक्रम शुरू होने पर मुख्य () विधि को मुख्य धागे से लागू किय

  1. क्या हम जावा में एक अमूर्त वर्ग का ऑब्जेक्ट बना सकते हैं?

    नहीं, हम एक अमूर्त वर्ग की वस्तु नहीं बना सकते। लेकिन हम एक अमूर्त वर्ग का संदर्भ चर बना सकते हैं। संदर्भ चर का उपयोग व्युत्पन्न वर्गों (सार वर्ग के उपवर्ग) की वस्तुओं को संदर्भित करने के लिए किया जाता है। एक अमूर्त वर्ग का अर्थ है कार्यान्वयन को छिपाना और उपयोगकर्ता को फ़ंक्शन परिभाषा दिखाना सार व