Verwendung von Kotlin-Erweiterungsfunktionen
fun T.duplizieren(): T? {
var kopieObjekt: T? = null
try {
val byteArrayOutputStream = ByteArrayOutputStream()
val objectOutputStream = ObjectOutputStream(byteArrayOutputStream)
objectOutputStream.writeObject(this)
objectOutputStream.flush()
objectOutputStream.close()
byteArrayOutputStream.close()
val byteData = byteArrayOutputStream.toByteArray()
val byteArrayInputStream = ByteArrayInputStream(byteData)
try {
kopieObjekt = ObjectInputStream(byteArrayInputStream).readObject() as T
} catch (e: ClassNotFoundException) {
e.printStackTrace()
}
} catch (e: IOException) {
e.printStackTrace()
}
return kopieObjekt
}
Anwendungsfall
var objekt = Any()
var duplikatObjekt = objekt.duplizieren()
Java
T copyObject(T sourceObject) {
T copyObject = null;
try {
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);
objectOutputStream.writeObject(sourceObject);
objectOutputStream.flush();
objectOutputStream.close();
byteArrayOutputStream.close();
byte[] byteData = byteArrayOutputStream.toByteArray();
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(byteData);
try {
copyObject = (T) new ObjectInputStream(byteArrayInputStream).readObject();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
} catch (IOException e) {
e.printStackTrace();
}
return copyObject;
}
Anwendungsfall
Object object = new Object();
Object duplicateObject = copyObject(object);
\==============================================
Kotlin Update
Wenn Sie eine Datenklasse verwenden, haben Sie eine Kopiermethode, die die Kotlin-Datenklasse kopiert. Das Tolle ist, dass Sie auch einige Werte übergeben können, um das Objekt mit einer neuen Kopie zu modifizieren. Ich würde diese Methode empfehlen.
Beispiel:
//Klasse
data class TestModel(val title: String, var subtitle: String)
Anwendungsfall
val testClass = TestModel("Testtitel", "Testuntertitel")
val newInstance = testClass.copy(subtitle = "neuer Untertitel für die Kopie")