2013-09-05 20 views
6

Ho una classe che implementa Serializable. C'è un altro oggetto di classe nella classe che non implementa serializzabile. Cosa dovrebbe essere fatto per serializzare il membro della classe.Serializzare una variabile di classe che non implementa serializzabile

La mia classe è qualcosa di simile

public class Employee implements Serializable{ 
    private String name; 
    private Address address; 
} 


public class Address{ 
    private String street; 
    private String area; 
    private String city; 
} 

Qui, non ho accesso alla classe Indirizzo per renderlo implementare Serializable. Per favore aiuto. Grazie in anticipo

+0

Devi utilizzare la serializzazione di Java? –

risposta

3

Bene, naturalmente, c'è la soluzione più ovvia per inserire Serializable su di esso. Capisco che non è sempre un'opzione.

Forse è possibile estendere il Address e inserire Serializable sul figlio che si crea. Quindi lo fai in modo che Employee contenga un campo Child invece di un campo Address.

Qui ci sono alcune altre cose da considerare:

  • È possibile mantenere il campo Employee.address come un tipo Address. È possibile serializzare se si chiama Employee.setAddress(new SerializableAddress())
  • Se Address è nullo, è possibile serializzare l'intero dipendente anche se il tipo di Address non è serializzabile.
  • Se si contrassegna Address come transitorio, si salta cercando di serializzare Address. Questo potrebbe risolvere il tuo problema.

Poi ci sono altri quadri "serializzazione" come XStream che non richiedono l'interfaccia marcatore di lavorare. Dipende dalle tue esigenze, anche se questa è un'opzione.

+0

Non lo estenderei **. I membri sono comunque privati. Crea una classe 'SerializeableAdress' che dovrebbe essere una copia esatta di' Indirizzo' e renderla serializzabile (ovviamente ...). – mike

+0

@ mike Sono private, ma sono già 'Serializable'. Non sarà un non-problema? –

+0

Possiamo in qualche altro modo tranne che estendere la classe di indirizzo ?? – user2047302

1

Non si può rendere direttamente questa classe di indirizzo serializzabile in quanto non si ha accesso per modificarla.

ci sono poche opzioni:

  • creare una sottoclasse della classe Address e utilizzarlo. Puoi contrassegnare questa classe come serializzabile.
  • Contrassegnare l'indirizzo come transitorio.

Si prega di dare un'occhiata a questo collegamento stackoverflow

+0

Anche questa classe viene utilizzata in molte altre logiche. Se devo creare una nuova classe che è esattamente la stessa dovrò riscrivere tante parti dell'app. – user2047302

+0

È possibile ereditare semplicemente questa classe senza sovrascrivere nessuno dei metodi in essa contenuti. Sarà buono come classe base. –

0

Se si ha la possibilità di utilizzare una libreria di 3a parte per la serializzazione, allora si può usare per esempio kryo. Questo ha una serializzazione predefinita che non richiede l'implementazione di interfacce o campi di annotazione.

È possibile controllare Which is the best alternative for Java Serialization? per ulteriori alternative.

Problemi correlati