hutool
克隆
package com.june;
import cn.hutool.core.clone.CloneRuntimeException;
import cn.hutool.core.clone.CloneSupport;
import cn.hutool.core.clone.Cloneable;
import cn.hutool.core.util.ObjectUtil;
import java.io.Serializable;
/**
* hutool的克隆方法
*/
public class HutoolClone {
public static void main(String[] args) {
Dog dog = new Dog("旺财",2);
Dog dog2 = ObjectUtil.clone(dog);
//用这个方法需要实现Serializable接口
//深克隆
//浅克隆不会克隆原对象中的引用类型,仅仅拷贝了引用类型的指向。
Dog dog4 = ObjectUtil.cloneByStream(dog2);
Dog dog3 = (Dog) dog.clone();
System.out.println(dog);
System.out.println(dog2);
System.out.println(dog3);
System.out.println(dog4);
Cat cat = new Cat("june",2);
Cat clone = cat.clone();
System.out.println(clone);
}
}
class Dog extends CloneSupport implements Serializable {
private String name;
private int age;
public Dog(String name, int age) {
this.name = name;
this.age = age;
}
public Dog() {
}
@Override
public String toString() {
return "Dog{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
class Cat implements Cloneable<Cat> {
private String name;
private int age;
public Cat() {
}
public Cat(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public Cat clone() {
try {
return (Cat) super.clone();
} catch (CloneNotSupportedException e) {
throw new CloneRuntimeException(e);
}
}
@Override
public String toString() {
return "Cat{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
需要克隆的对象 可以通过继承CloneSupport 类就能拥有clone()方法,可通过需要克隆的对象直接调用方法。
Dog dog = new Dog("旺财",2);
Dog dog3 = (Dog) dog.clone();
System.out.println(dog3);
结果截图
需要克隆的类也可以通过实现Cloneable接口获得clone()方法
另外ObejectUtil也提供clone(Object obj),cloneByStream(Object)
clone(Object obj),cloneByStream(Object)的区别
clone是浅克隆,cloneByStream是深克隆
clone不需要实现Serializable 接口
浅克隆不会克隆原对象中的引用类型,仅仅拷贝了引用类型的指向(应用类型地址复制给克隆对象)。