2013-05-31 20 views
8

Ho iniziato a leggere sulla serializzazione in Java e anche in altri linguaggi, ma cosa succede se ho una classe generica e voglio salvarne una istanza in un file.Come serializzare una classe generica in Java?

codice di esempio

public class Generic<T> { 
    private T key; 
    public Generic<T>() { 
    key = null; 
    } 
    public Generic<T>(T key) { 
    this.key = key; 
    } 
} 

Che cosa è il modo migliore per salvare questo tipo di oggetto? (Naturalmente c'è di più nella mia vera classe cenerica, ma mi sto solo chiedendo l'idea.)

+3

Proprio come qualsiasi altra classe: fanno implementare l'interfaccia di '' Serializable':) ' – sp00m

+0

@ sp00m: a volte non è possibile cambiare la classe. Probabilmente non è il caso qui) – Burkhard

risposta

17

È necessario per rendere generica classe Serializable come al solito.

public class Generic<T> implements Serializable {...}

Se i campi vengono dichiarate utilizzando tipi generici, si consiglia specificare che essi devono applicare Serializable.

public class Generic<T extends Serializable> implements Serializable {...}

Si prega di essere a conoscenza della sintassi non comune Java qui.

public class Generic<T extends Something & Serializable> implements Serializable {...}

+0

Ty Preferisco questa risposta perché è più facile per me aggiungere questa cosa alla mia classe ... Ce l'ho già ... implementa serializzabile, ma quando provo ObjectOutputStream per salvare. Il mio programma si blocca solo. – Leolian

+0

L'implementazione di 'Serializable' interrompe l'incapsulamento e l'occultamento delle informazioni; tutti i membri privati ​​e di pacchetto-privato diventano parte dell'API esportata della classe. Ciò introduce potenziali vulnerabilità di sicurezza e potrebbe rendere la classe più fragile. La decisione di implementare 'Serializable' dovrebbe essere presa con molta cura e il modulo serializzato dovrebbe essere attentamente progettato (Efffective Java, 2nd Ed). – scottb

0

Se non si vuole (o non può) implementare l'interfaccia Serializable, è possibile utilizzare XStream. Ecco un breve tutorial.

Nel tuo caso:

XStream xstream = new XStream(); 
Generic<T> generic = ...;//whatever needed 
String xml = xstream.toXML(generic); 
//write it to a file (or use xstream directly to write it to a file) 
+0

Un'altra alternativa all'implementazione di 'Serializable' è l'implementazione di' Externalizable' (che estende 'Serializable'). – scottb

Problemi correlati