373 Stimmen

Wie erstellt man eine Tiefenkopie eines Objekts?

Es ist etwas schwierig, eine tiefe Objektkopierfunktion zu implementieren. Wie stellen Sie sicher, dass das Originalobjekt und das geklonte Objekt keine gemeinsame Referenz haben?

0voto

mastercool Punkte 353

Hier ist ein einfaches Beispiel, wie man ein beliebiges Objekt tief klont: Zuerst serialisierbar implementieren

public class CSVTable implements Serializable{
    Table<Integer, Integer, String> table; 
    public CSVTable() {
        this.table = HashBasedTable.create();
    }

    public CSVTable deepClone() {
        try {
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            ObjectOutputStream oos = new ObjectOutputStream(baos);
            oos.writeObject(this);

            ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
            ObjectInputStream ois = new ObjectInputStream(bais);
            return (CSVTable) ois.readObject();
        } catch (IOException e) {
            return null;
        } catch (ClassNotFoundException e) {
            return null;
        }
    }

}

Und dann

CSVTable table = new CSVTable();
CSVTable tempTable = table.deepClone();

ist die Art und Weise, wie man den Klon erhält.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X