在日常的工作中难免会遇到到对象克隆的需求,那么接下来简单的记录一下在JAVA中对象克隆的实现。

需要注意的是

在一个java对象中 如果包含了另一个java对象,那么就需要深度克隆。含义大概就是只要是引用数据类型的对象,那么都需要做深度克隆

一 、首先定义一个java对象 User 并实现 java.lang.Cloneable 接口,这个接口虽然没有实现任何方法 但是必须实现它,否则会抛出java.lang.CloneNotSupportedException异常

public class User implements Cloneable{
@Override
public Object clone() {
try {
return super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return null;
}
private String username;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}

二 、 定义一个测试类UserTest

public class UserTest {
public static void main(String[] args) {
User user=new User();
user.setUsername("at peach");
User u=(User) user.clone();
System.out.println(user==u);//false
System.out.println(u.getUsername());//at peach
}
}

三 、运行UserTest类 结果如下

false
at peach

这样的克隆我们叫他为浅克隆,那么还有上面所说的深度克隆。实现原理是一样的。

前面使用一些对象的克隆比较麻烦。那么apache提供了一个方便的类org.apache.commons.beanutils

使用方法是:

User user=new User();
user.setUsername("at peach");
User u=(User)BeanUtils.cloneBean(user);

发现结果也是一样的。SO EASY