如何实现对象克隆
有两种方式: 1)实现Cloneable接口并重写Object类中的clone()方法; 2) 实现Serializable接口,通过对象的序列化和反序列化实现克隆,可以实现真正的深度克隆。 注意:基于序列化和反序列化实现的克隆不仅仅是深度克隆,更重要的是通过泛型限定,可以检查出要克隆的对象是否支持序列化,这项检查是编译器完成的,不是在运行时抛出异常,这种是方案明显优于使用Object类的clone方法克隆对象。让问题在编译的时候暴露出来总是优于把问题留到运行时。
本题涉及java知识点分析
java clone()方法
Object对象有个clone()方法,clone方法返回与当前对象的一个副本对象。可以通过操作副本对象而不影响当前对象:实现了对象中各个属性的复制,但它的可见范围是protected的,所以实体类使用克隆的前提是: ① 实现Cloneable接口,这是一个标记接口,自身没有方法。 ② 覆盖clone()方法,可见性提升为public。
Java 深度克隆
利用序列化实现深度克隆 把对象写到流里的过程是序列化(Serialization)过程;而把对象从流中读出来的过程则叫反序列化(Deserialization)过程。应当指出的是,写到流里的是对象的一个拷贝,而原对象仍然存在于JVM里面。 在Java语言里深度克隆一个对象,常常可以先使对象实现Serializable接口,然后把对象(实际上只是对象的拷贝)写到一个流里(序列化),再从流里读回来(反序列化),便可以重建对象。
希望对大家有所帮助。