Klonobjekt in Kotlin

David Mbochi Njonge 20 Juni 2023
  1. Generieren Sie ein Kotlin-Projekt
  2. Verwenden Sie die copy()-Methode der Datenklasse, um das Objekt in Kotlin zu klonen
  3. Verwenden Sie die clone()-Methode von ArrayList, um Objekte in Kotlin zu klonen
  4. Erstellen Sie eine Erweiterungsfunktion zum Klonen von Objekten in Kotlin
  5. Implementieren Sie die klonbare Schnittstelle zum Klonen von Objekten in Kotlin
  6. Abschluss
Klonobjekt in Kotlin

Die Klonfunktionalität wird normalerweise in objektorientierten Programmiersprachen verwendet. Klonen ist definiert als das Erstellen einer Kopie eines Objekts, was bedeutet, dass das kopierte Objekt die genauen Eigenschaften und Methoden des ursprünglichen Objekts hat.

Das Kopieren eines Objekts hilft, die Verschwendung von Ressourcen zu vermeiden, da es das vorhandene Objekt wiederverwendet, ohne den gesamten Prozess der Erstellung eines Objekts und dessen Hinzufügen zum Heap zu übernehmen.

Dieses Tutorial wird verschiedene Ansätze vermitteln, die wir nutzen können, um eine Kopie oder einen Klon eines Objekts zu erstellen.

Generieren Sie ein Kotlin-Projekt

Gehen Sie in die IntelliJ-Entwicklungsumgebung und wählen Sie Datei>Neu>Projekt. Geben Sie den Projektnamen als kotlin-copy-object ein, wählen Sie Kotlin im Abschnitt Sprache und wählen Sie Intellij im Abschnitt Build-System.

Erstellen Sie eine Datei namens Main.kt im Ordner src/main/kotlin. Kopieren Sie den folgenden Code und fügen Sie ihn in die Datei ein.

data class Movie(var id: Int,
                 var name: String,
                 var genre: String,
                 var duration: Int);

fun fetchMovies(): ArrayList<Movie>{
    return arrayListOf(
        Movie(1,"Paws of fury","animation",60),
        Movie(2,"Green lantern","animation",80),
        Movie(3,"Hot seat","action",70),
        Movie(4,"Chip n Dale","fantasy",60),
        Movie(5,"Bullet train","mystery",80)
    );
}

In diesem Code haben wir eine Methode namens fetchMovies() erstellt, die eine ArrayList von Movie-Objekten zurückgibt. Die Movie-Objekte werden mit einer Datenklasse erstellt, die wir ebenfalls in diesem Code definiert haben.

Zu den Eigenschaften der Filmobjekte gehören id, name, genre und Dauer. Die Eigenschaft id ist vom Typ int, und die anderen Eigenschaften sind vom Typ string.

Wir werden die Methode fetchMovies() in einigen Beispielen verwenden, die in diesem Tutorial behandelt werden, um zu zeigen, wie man eine Kopie eines Objekts in Kotlin erstellt.

Verwenden Sie die copy()-Methode der Datenklasse, um das Objekt in Kotlin zu klonen

Eine Datenklasse ist eine Klasse, die verwendet wird, um Daten vorübergehend zu speichern, und stellt dem Entwickler einige sofort einsatzbereite Funktionen bereit. Die Datenklasse bietet die folgenden Methoden, die der Entwickler nutzen kann, ohne ihre Logik zu implementieren: equals(), hashCode(), toString() und copy().

Kopieren Sie den folgenden Code und fügen Sie ihn nach der Methode fetchMovies() in die Datei Main.kt ein.

fun usingCopyOnDataClass(){
    val movie: Movie = fetchMovies()[2];
    val copyOfMovie: Movie = movie.copy();
    println(copyOfMovie);
}

fun main(){
    usingCopyOnDataClass();
}

In diesem Code haben wir die Methode fetchMovies() verwendet, die eine ArrayList der Movie-Objekte zurückgibt, um das Movie-Objekt an Index 2 zu erhalten.

Unser Ziel ist es, eine Kopie des Objekts zu erstellen, indem wir die von der Datenklasse bereitgestellte Methode copy() nutzen. Die Methode copy() der Datenklasse liefert uns dieselbe Kopie unseres Objekts.

Hinweis: Es werden keine neuen Objekte erstellt, um dies zu realisieren.

Beachten Sie, dass Sie auch einige Eigenschaften des Objekts ändern können, während Sie den Rest beibehalten, indem Sie die Werte der Eigenschaften, die Sie ändern möchten, als Argument der Methode copy() übergeben.

Wenn Sie beispielsweise das Argument copy(name = "Avengers") übergeben, wird der Name der neuen Kopie des Objekts in den von Ihnen angegebenen geändert, und der Rest ändert sich nicht.

Führen Sie diesen Code aus und stellen Sie sicher, dass die Ausgabe wie unten gezeigt ist.

Movie(id=3, name=Hot seat, genre=action, duration=70)

Verwenden Sie die clone()-Methode von ArrayList, um Objekte in Kotlin zu klonen

Kommentieren Sie das vorherige Beispiel aus und kopieren Sie den folgenden Code und fügen Sie ihn nach dem Kommentar in die Datei Main.kt ein.

fun usingCloneWithArrayList(){
    @Suppress("UNCHECKED_CAST")
    val movies: ArrayList<Movie> =
        fetchMovies().clone() as ArrayList<Movie>;
    movies.forEach(::println);
}

fun main(){
    usingCloneWithArrayList();
}

In diesem Code haben wir die Methode fetchMovies() verwendet, um eine Kopie der zurückgegebenen ArrayList-Instanz mit der Methode clone() zu erstellen.

Die Methode clone() von ArrayList wird von der Klasse Object geerbt. Diese Methode gibt die Listeninstanz zurück, dh die Elemente werden nicht kopiert.

Da die Methode clone() ein Object zurückgibt, haben wir das Schlüsselwort as verwendet, um es in ArrayList<Movie> umzuwandeln. Führen Sie diesen Code aus und stellen Sie sicher, dass die Ausgabe wie unten gezeigt ist.

Movie(id=1, name=Paws of fury, genre=animation, duration=60)
Movie(id=2, name=Green lantern, genre=animation, duration=80)
Movie(id=3, name=Hot seat, genre=action, duration=70)
Movie(id=4, name=Chip n Dale, genre=fantasy, duration=60)
Movie(id=5, name=Bullet train, genre=mystery, duration=80)

Erstellen Sie eine Erweiterungsfunktion zum Klonen von Objekten in Kotlin

Eine Erweiterungsfunktion ist eine Funktion, die es uns ermöglicht, einer vorhandenen Klasse Funktionalität hinzuzufügen, ohne den zugrunde liegenden Code zu ändern. Kommentieren Sie den vorherigen Code aus und kopieren Sie den folgenden Code und fügen Sie ihn nach dem Kommentar in die Datei Main.kt ein.

fun Movie.clone(): Movie{
    val movie = Movie(
        this.id,
        this.name,
        this.genre,
        this.duration);
    return movie;
}

fun usingCloneExtensionFunction(){
    val movie = fetchMovies()[4];
    val clonedMovie = movie.clone();
    println(clonedMovie);
}

fun main(){
    usingCloneExtensionFunction();
}

In diesem Code haben wir eine Erweiterungsfunktion der Datenklasse Movie mit dem Namen clone() erstellt. Wenn die Clone-Erweiterungsfunktion aufgerufen wird, gibt sie die aktuelle Instanz des Objekts zurück.

Um die Erweiterungsfunktion clone() zu verwenden, haben wir die Methode fetchMovies() verwendet, um den Film an Index 4 abzurufen, und dann die Funktion clone() dafür aufgerufen. Dadurch wird eine Kopie desselben Objekts wie das Objekt an Index 4 erstellt.

Führen Sie diesen Code aus und stellen Sie sicher, dass die Ausgabe wie unten gezeigt ist.

Movie(id=5, name=Bullet train, genre=mystery, duration=80)

Implementieren Sie die klonbare Schnittstelle zum Klonen von Objekten in Kotlin

Wenn Sie Anwendungen entwickeln und eine bestimmte Klasse kopieren möchten, fügen wir diese Funktionalität normalerweise der Klasse hinzu, indem wir die Schnittstelle Cloneable implementieren.

Die Cloneable-Schnittstelle hat eine Methode namens clone(), die die String-Darstellung Ihrer Klasse zurückgibt. Das einzige, was wir tun müssen, ist die Methoden clone() und toString() zu überschreiben.

Beachten Sie, dass Sie auch die Methode clone() öffentlich machen müssen.

Kommentieren Sie das vorherige Beispiel aus und kopieren Sie den folgenden Code und fügen Sie ihn nach dem Kommentar in die Datei Main.kt ein.

class Student(
    private val firstName: String,
    private val lastName: String): Cloneable{

   public override fun clone(): Any {
        return super.clone()
    }

    override fun toString(): String {
        return "Student(firstName='$firstName', lastName='$lastName')"
    }

}

fun implementingCloneable(){
    val student: Student = Student("john","doe");
    val clonedStudent = student.clone();
    println(clonedStudent.toString());
}

fun main(){
    implementingCloneable();
}

In diesem Code haben wir eine Klasse namens Student mit den Eigenschaften firstName und lastName erstellt. Diese Klasse implementiert die Cloneable-Schnittstelle und überschreibt ihre clone()-Methode.

Wir haben auch die Methode toString() überschrieben, damit wir das geklonte Objekt in der Konsole protokollieren können.

implementingCloneable() erstellt eine Instanz eines Student-Objekts und ruft die clone()-Methode auf, um eine Kopie des Objekts zu erstellen. Führen Sie diesen Code aus und stellen Sie sicher, dass die Ausgabe wie unten gezeigt ist.

Student(firstName='john', lastName='doe')

Abschluss

In diesem Tutorial haben wir gelernt, wie man eine Kopie eines Objekts in Kotlin erstellt. Zu den Ansätzen, die wir behandelt haben, gehören die Verwendung der copy()-Methode der Datenklasse, die Verwendung der clone()-Methode von ArrayList, die Erstellung einer Erweiterungsfunktion und die Verwendung der Cloneable-Schnittstelle.

David Mbochi Njonge avatar David Mbochi Njonge avatar

David is a back end developer with a major in computer science. He loves to solve problems using technology, learning new things, and making new friends. David is currently a technical writer who enjoys making hard concepts easier for other developers to understand and his work has been published on multiple sites.

LinkedIn GitHub

Verwandter Artikel - Kotlin Object