Heim > Java > javaLernprogramm > So verwenden Sie Java Deep Copy, Shallow Copy und die klonbare Schnittstelle

So verwenden Sie Java Deep Copy, Shallow Copy und die klonbare Schnittstelle

PHPz
Freigeben: 2023-04-28 20:31:05
nach vorne
1341 Leute haben es durchsucht

1. Einführung in die Cloneable-Schnittstelle

Cloneable ist eine getaggte Schnittstelle (leere Schnittstelle). Implementieren Sie Cloneable, um anzugeben, dass das Objekt geklont werden kann , Sie können die Methode Object.clone() verwenden. Wenn ein Klassenobjekt, das Cloneable nicht implementiert, clone() aufruft, wird eine CloneNotSupportedException ausgelöst.

So verwenden Sie Java Deep Copy, Shallow Copy und die klonbare Schnittstelle

Es versteht sich, dass benutzerdefinierte Typen eine Markierungsfunktion haben, bei der Benutzer markieren müssen, welche Klassen geklont werden können Die Cloneable-Schnittstelle zeigt an, dass die von dieser Klasse erstellten Objekte geklont werden können.

Wenn Sie möchten, dass eine Klasse die Funktion zum Kopieren von Instanzen hat, müssen Sie zusätzlich zur Implementierung der Cloneable-Schnittstelle auch die clone()-Methode der Object-Klasse überschreiben.

So verwenden Sie Java Deep Copy, Shallow Copy und die klonbare Schnittstelle

Sie können sehen, dass die clone()-Methode der Object-Klasse durch protected geändert wurde, sodass Sie den Superschlüssel im überschriebenen Klon übergeben müssen ()-Methode So rufen Sie die clone()-Methode in der Object-Klasse auf

So verwenden Sie Java Deep Copy, Shallow Copy und die klonbare Schnittstelle

2 Einführung und Beispiele für flaches Kopieren

Beim Kopieren eines Objekts werden die Mitgliedsvariablen des Basisdatentyps des Objekts kopiert, die Mitgliedsvariablen des Referenztyps werden jedoch nur als Referenz übergeben und es wird kein neues Objekt erstellt

Wenn das Wird der Inhalt des Referenztyps geändert, wirkt sich dies auf das kopierte Objekt aus. Kurz gesagt: Shallow Copy kopiert nur das Objekt, das kopiert wird, nicht das Objekt, auf das es verweist.

Beobachten Sie den folgenden Code, verwenden Sie die Instanz der Money-Klasse als Feld der Person-Klasse, erstellen Sie ein neues Objekt der Person-Klasse, person1, und kopieren Sie dieses person1-Objekt in person2 Hier kopiert Shallow Copy nur die Geldreferenz des Person1-Objekts auf Person2. Die Momey in Person1 und Person2 verweisen auf dasselbe Objekt. Nr 🎜#

3. Einführung und Beispiele für Deep Copy

Beim Kopieren eines Objekts, zusätzlich zum Kopieren der Mitgliedsvariablen des Basisdatentyps, beim Kopieren der Mitgliedsvariablen des Referenztyps, Erstellen Sie ein neues Objekt, das die Mitgliedsvariablen des Referenztyps enthält. Kurz gesagt:

Deep Copy kopiert alle Objekte, auf die das zu kopierende Objekt verweist.

So verwenden Sie Java Deep Copy, Shallow Copy und die klonbare Schnittstelle

Der folgende Code implementiert eine tiefe Kopie, um eine tiefe Kopie des Person1-Objekts zu implementieren. Verwenden Sie zuerst die Person-tmp-Referenz, um das Ergebnis der flachen Kopie zu speichern, und suchen Sie dann das Geldobjekt über die tmp-Referenz Speichern Sie das Geldobjekt. Erstellen Sie eine Kopie, weisen Sie sie dann dem Geld in tmp zu und geben Sie es schließlich an tmp zurück. Auf diese Weise wird auch das durch Geld referenzierte Objekt kopiert, wodurch eine tiefe Kopie entsteht. Zu diesem Zeitpunkt verweisen momey in Person1 und Person2 auf zwei verschiedene Objekte.

class Money {
    public double m = 666;
}
class Person implements Cloneable{
    int id;
    public Money money = new Money();

    public Person(int id) {
        this.id = id;
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }

    @Override
    public String toString() {
        return "Person{" +
                "id=" + id +
                ", money=" + money.m +
                '}';
    }
}
public class TestDemo3 {
    public static void main(String[] args) throws CloneNotSupportedException {
        Person person1 = new Person(1);
        Person person2 = (Person) person1.clone();

        System.out.println("通过person2修改前的结果");
        System.out.println(person1);
        System.out.println(person2);

        person2.money.m = 888;
        person2.id = 2;
        System.out.println("通过person2修改后的结果");
        System.out.println(person1);
        System.out.println(person2);
    }
}
Nach dem Login kopieren

Ausführungsergebnis:

So verwenden Sie Java Deep Copy, Shallow Copy und die klonbare Schnittstelle

Deep-Copy-Illustration:

#🎜 🎜#

4. Zusammenfassung der Klonmethode

Die Klonmethode in Java ist eine flache Kopie und der Referenztyp übergibt weiterhin die Referenz. Wir können Deep Copy implementieren, indem wir weiterhin die clone()-Methode aufrufen und die clone()-Methode erneut für die Referenztypvariable des Objekts implementieren.

Das obige ist der detaillierte Inhalt vonSo verwenden Sie Java Deep Copy, Shallow Copy und die klonbare Schnittstelle. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:yisu.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage