/**
* 反射实现clone 方法
* 无参构造情况
*/
public class CloneDemo {
public static void main(String[] args) throws InstantiationException, IllegalAccessException {
//创建Person 对象
Person p = new Person();
p.name = "Tom";
p.age = 10;
//调用克隆返回克隆对象
Person p1 =(Person) clone(p);
System.out.println(p1.name+"|"+p1.age);
}
//定义一个clone() 方法
protected static Object clone(Object obj) throws IllegalAccessException, InstantiationException {
//1.获取字节码对象
Class<Object> clz = (Class<Object>) obj.getClass();
//2.获取实例对象--新对象
Object o = clz.newInstance();
//3.获取原对象的所有属性 指定
Field[] fs = clz.getDeclaredFields();
//4.把原对象的属性值赋值到新对象中
for (Field f:fs
) {
//暴力破解
f.setAccessible(true);
//获取原对象的属性值
Object value = f.get(obj);
//把原对象的属性值赋值到新对象的属性中
f.set(o,value);
}
//返回新对象
return o;
}
}
class Person{
String name;
int age;
}
运行结果: