📄 copyutil.java
字号:
package com.softeem.j2se.lesson4;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class CopyUtil {
// public static Student copy(Student stu){
// Student stu2 = new Student();
// stu2.setNo(stu.getNo());
// stu2.setName(stu.getName());
// stu2.setAge(stu.getAge());
// return stu2;
// }
//
// public static Teacher copy(Teacher tea){
// Teacher tea2 = new Teacher();
// tea2.setName(tea.getName());
// tea2.setSex(tea.getSex());
// tea2.setTechaerAge(tea.getTechaerAge());
// return tea2;
// }
/**
* 拷贝Javabean风格的对象
* @param obj
* @return
*/
public static Object copy(Object obj) {
//获得某个对象的Class类型对象,Class对象是整个反射机制的源头和灵魂!
//Class对象是在类加载的时候产生,保存着类的相关属性、构造器、方法等信息
Class clz = obj.getClass();
Object objCopy = null;
try {
//得到Class对象所表征的类的一个实例
objCopy = clz.newInstance();
//得到Class对象所表征的类的所有属性(包括私有属性)
Field[] fields = clz.getDeclaredFields();
for (int i = 0; i < fields.length; i++) {
//得到属性的名字
String fieldName = fields[i].getName();
//由属性名字得到对应get和set方法的名字
String getMethodName = "get"+ fieldName.substring(0, 1).toUpperCase()+ fieldName.substring(1);
String setMethodName = "set"+ fieldName.substring(0, 1).toUpperCase()+ fieldName.substring(1);
//由方法的名字得到get和set方法的Method对象
Method getMethod = clz.getDeclaredMethod(getMethodName,new Class[]{});
Method setMethod = clz.getDeclaredMethod(setMethodName,fields[i].getType());
//调用obj对象的getMethod方法
Object result = getMethod.invoke(obj, new Object[]{});
//调用obj对象的setMethod方法
setMethod.invoke(objCopy, result);
}
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return objCopy;
}
public static void main(String[] args) {
Student stu = new Student(100, "Mything", 21);
Student stu2 = (Student) CopyUtil.copy(stu);
System.out.println(stu2.getNo()+" "+stu2.getName()+" "+stu2.getAge());
// System.out.println(stu2.getName());
// Teacher tea = new Teacher("xuliang", '男', 10);
// Teacher tea2 = (Teacher) CopyUtil.copy(tea);
// System.out.println(tea2.getName());
// Student stuCopy = CopyUtil.copy(stu);
// System.out.println(stu==stuCopy);
// System.out.println(stu.equals(stuCopy));
// Teacher teaCopy = CopyUtil.copy(tea);
// System.out.println(tea==teaCopy);
// System.out.println(tea.equals(teaCopy));
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -