मैं जावा बीन्स के लिए अपरिवर्तनीयता प्रदान करने की संभावना के बारे में बहुत उत्सुक हूं (यहां बीन्स द्वारा मेरा मतलब है कि एक खाली कन्स्ट्रक्टर के साथ कक्षाएं जो सदस्यों के लिए गेटर्स और सेटर्स प्रदान करती हैं)। स्पष्ट रूप से ये कक्षाएं अपरिवर्तनीय नहीं हैं और जहां उनका उपयोग डेटा परत से मूल्यों को परिवहन करने के लिए किया जाता है, यह वास्तविक समस्या की तरह लगता है।जावा में अपरिवर्तनीय सेम
स्टैक ओवरव्लो में इस समस्या का एक दृष्टिकोण यहां उल्लेख किया गया है जिसे "सी # में अपरिवर्तनीय ऑब्जेक्ट पैटर्न" कहा जाता है जहां ऑब्जेक्ट पूरी तरह से बनाया गया है। मेरे पास एक वैकल्पिक दृष्टिकोण है और वास्तव में लोगों की राय सुनना अच्छा लगेगा।
पैटर्न में दो वर्ग अपरिवर्तनीय और उत्परिवर्तनीय होते हैं जहां उत्परिवर्तनीय और अपरिवर्तनीय दोनों एक इंटरफेस को लागू करते हैं जो गैर-उत्परिवर्तनीय बीन विधियों को प्रदान करता है।
उदाहरण
public interface DateBean {
public Date getDate();
public DateBean getImmutableInstance();
public DateBean getMutableInstance();
}
public class ImmutableDate implements DateBean {
private Date date;
ImmutableDate(Date date) {
this.date = new Date(date.getTime());
}
public Date getDate() {
return new Date(date.getTime());
}
public DateBean getImmutableInstance() {
return this;
}
public DateBean getMutableInstance() {
MutableDate dateBean = new MutableDate();
dateBean.setDate(getDate());
return dateBean;
}
}
public class MutableDate implements DateBean {
private Date date;
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public DateBean getImmutableInstance() {
return new ImmutableDate(this.date);
}
public DateBean getMutableInstance() {
MutableDate dateBean = new MutableDate();
dateBean.setDate(getDate());
return dateBean;
}
}
यह दृष्टिकोण के लिए अनुमति देता है सेम (सामान्य सम्मेलनों द्वारा) प्रतिबिंब का उपयोग कर निर्माण किया जा करने के लिए और भी हमारे पास अवसर पर अपरिवर्तनीय संस्करण में बदलने के लिए अनुमति देता है। दुर्भाग्य से प्रति बीन बॉयलरप्लेट की बड़ी मात्रा स्पष्ट रूप से है।
मुझे इस मुद्दे पर अन्य लोगों के दृष्टिकोण को सुनने में बहुत दिलचस्पी है। (एक अच्छा सवाल है, जो बजाय जवाब दिया जा सकता चर्चा की :)
यह एक बहुत अच्छा विचार है। यह समस्या बहुत सुंदर ढंग से फिट बैठता है। चीयर्स क्रिस –
यदि यह डेटबीन में आयोजित दिनांक वस्तु है, तो आपको प्राप्त करने के लिए एक नई तिथि बनाना होगा। अन्यथा आप ImmutableDate.getDate() सेट के माध्यम से दिनांक को संशोधित कर सकते हैं .... सेट करें .... – monksy