2016-06-22 15 views
0

Ich habe einen Mitarbeiter Klasse:Kann ich der Klasse des serialisierten Objekts Felder hinzufügen?

class Employee implements Serializable{ 
    int empId; 
    String empName; 
    double salary; 
} 

Eine Aufgabe dieser Mitarbeiter Klasse serialisiert und in einigen Datei gespeichert sagen employee.ser

ich ein weiteres Feld in der bestehenden Mitarbeiter Klasse hinzufügen möchten. Jetzt wird meine Mitarbeiter Klasse so etwas wie diese

class Employee implements Serializable{ 
    int empId; 
    String empName; 
    double salary; 
    String state="abc"; 
} 

Ist es möglich, das alte Objekt deserialisieren, so dass es Standardwert für den Staat hat?

Wenn es möglich ist, wie?

+0

Ich bin nicht ganz sicher, aber es kann basierend auf der seriellen Version ID erfolgen. Also für die erste Mitarbeiter-ID sagen wir, die Seriennummer-ID war 1, und für die aktualisierte Klasse ist die Seriennummer der Version 2. Ein Deserializer kann implementiert werden, um die Seriennummer-ID zu überprüfen und die darauf basierenden Felder zu aktualisieren. – Jaiprakash

+0

@Jaiprakash Nein, kann es nicht. Wenn Sie die 'serialVersionUID' ändern, wird lange vor der Ausführung Ihres Codes eine Ausnahme auftreten. Deshalb sollten Sie es nicht ändern, – EJP

+0

Ja, es kann mit benutzerdefinierten Deserializer getan werden. Schritte sind: 1. Ändern Sie nicht serialVersionUID. Schritt 2: Implementieren Sie den benutzerdefinierten Deserializer. Beispielcode: class CustomDesrializer Object erstreckt { \t \t public CustomDesrializer (Fileinputstream FileIn) throws IOException {Super (FileIn);} \t \t \t \t public Employee customReadObject() throws ClassNotFoundException, IOException { \t \t \t Mitarbeiter obj = (Mitarbeiter) super.readObject(); \t \t \t if (obj.state == null) \t \t \t \t obj.state = "abc"; \t \t \t return obj; \t \t} \t} –

Antwort