kotlin 深拷贝
时间: 2023-11-24 08:48:29 浏览: 69
深拷贝是指在拷贝一个对象时,不仅仅把对象的引用进行复制,还把该对象引用的值也一起拷贝。在 Kotlin 中,可以通过实现 Serializable 接口来实现深拷贝。下面是一个 Kotlin 的深拷贝函数的示例代码:
```
fun <T : Serializable> T.deepCopy(obj: T?): T? {
if (obj == null) return null
val baos = ByteArrayOutputStream()
val oos = ObjectOutputStream(baos)
oos.writeObject(obj)
oos.close()
val bais = ByteArrayInputStream(baos.toByteArray())
val ois = ObjectInputStream(bais)
@Suppress("unchecked_cast")
return ois.readObject() as T
}
```
这个函数接受一个泛型参数 T,T 必须实现 Serializable 接口。函数的参数是一个可空的 T 类型的对象 obj,如果 obj 为 null,则返回 null。函数内部创建了一个 ByteArrayOutputStream 对象 baos 和一个 ObjectOutputStream 对象 oos,用于将 obj 对象序列化为字节数组。然后关闭 oos 对象,创建一个 ByteArrayInputStream 对象 bais 和一个 ObjectInputStream 对象 ois,用于将字节数组反序列化为一个新的对象。最后,将反序列化后的对象强制转换为泛型类型 T 并返回。
阅读全文