码迷,mamicode.com
首页 > 编程语言 > 详细

java的clone

时间:2014-12-15 22:13:20      阅读:251      评论:0      收藏:0      [点我收藏+]

标签:io   ar   os   sp   java   on   数据   bs   cti   

java的浅克隆,十分简单。但是只会克隆基本的数据类型,当涉及到引用类型时就不好用了。

public class Employee implements Cloneable {
 private String name;
 private String gender;
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public String getGender() {
  return gender;
 }
 public void setGender(String gender) {
  this.gender = gender;
 }
 public Employee clone() throws CloneNotSupportedException {
  return (Employee) super.clone();
 }
}

实现深克隆的话有两种方法,一种就是引用的类也是实现了clone方法的。另一种是通过序列化来进行克隆。

第一种方法,需要将引用的类需要每个都clone。

public class Employee implements Cloneable {
 private String name;
 private String gender;
 private Date birthday;
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public String getGender() {
  return gender;
 }
 public void setGender(String gender) {
  this.gender = gender;
 }
 public Date getBirthday() {
  return birthday;
 }
 public void setBirthday(Date birthday) {
  this.birthday = birthday;
 }
 public Employee clone() throws CloneNotSupportedException {
  Employee cloned = (Employee) super.clone();
  cloned.birthday = (Date) birthday.clone();
  return cloned;
 }
}

第二种方法就不需要这么做了。

package clone;
import java.io.*;
import java.sql.Date;
public class Employee implements Serializable {
 private static final long serialVersionUID = 4435396040456359326L;
 private String name;
 private String gender;
 private Date birthday;
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public String getGender() {
  return gender;
 }
 public void setGender(String gender) {
  this.gender = gender;
 }
 public Date getBirthday() {
  return birthday;
 }
 public void setBirthday(Date birthday) {
  this.birthday = birthday;
 }
 
 public Object deepClone(Object obj) throws IOException, ClassNotFoundException {
  ByteArrayOutputStream baos = new ByteArrayOutputStream();
  ObjectOutputStream oos = new ObjectOutputStream(baos);
  oos.writeObject(obj);
  ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
  ObjectInputStream ois = new ObjectInputStream(bais);
  return ois.readObject();
 }
}

 

java的clone

标签:io   ar   os   sp   java   on   数据   bs   cti   

原文地址:http://my.oschina.net/u/2245444/blog/356370

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!