मैं "प्रभावी जावा" में क्रमबद्धता अध्याय पढ़ रहा हूं। मैं पुस्तक में नीचे दिए गए अनुच्छेद को समझने की कोशिश कर रहा हूं।जावा: serialization के दौरान readObjectNoData() को कब जोड़ना है?
यदि आप उदाहरण फ़ील्ड के साथ एक वर्ग लागू करते हैं जो धारावाहिक है और विस्तार योग्य है, तो आपको सावधानी बरतनी चाहिए। यदि वर्ग अपरिवर्तनशीलताओं कि इसके दृष्टांत फ़ील्ड अगर उनके डिफ़ॉल्ट मानों (शून्य अभिन्न प्रकार के लिए, बूलियन के लिए झूठे, और ऑब्जेक्ट संदर्भ प्रकार के लिए नल) के लिए शुरू किए गए उल्लंघन किया जाएगा है, तो आपको इस readObjectNoData विधि जोड़नी होगी वर्ग के लिए:
// readObjectNoData for stateful extendable serializable classes
private void readObjectNoData() throws InvalidObjectException {
throw new InvalidObjectException("Stream data required");
}
मुझे यकीन है कि क्या इसके बाद के संस्करण बयान का मतलब है नहीं कर रहा हूँ।
इस परीक्षण के लिए, मैं एक वर्ग व्यक्ति (दोनों serializable और बढ़ाई)
class Person implements Serializable{
private String name;
private int age;
Person() {
this("default",1);
}
Person(String name, int y) {
this.name = name;
this.age = y;
}
}
और एक वर्ग के कर्मचारी जो यह फैली बनाया।
class Employee extends Person {
String address ;
public Employee()
{
super();
address ="default_address";
}
public Employee(String name , int age, String address)
{
super(name,age);
this.address = address;
}
}
क्या मैंने बनाए गए व्यक्ति वर्ग में कोई आविष्कार किया है? उनका उल्लंघन कब किया जाएगा? मैंने कर्मचारी वर्ग में readObjectData() विधि के लिए कोड चिपकाया, लेकिन इसे कभी नहीं बुलाया गया। विधि कब ऑब्जेक्ट() को बुलाया जाएगा? क्या मैं कुछ भूल रहा हूँ ?
आपकी कक्षा 'कर्मचारी' में 'व्यक्ति' (इस उदाहरण के प्रयोजन के लिए) शामिल नहीं होना चाहिए, लेकिन व्यक्ति का उप-वर्ग होना चाहिए, यानी 'इसे बढ़ाता है'। – Barend
कोड संपादित किया गया। – vinoth