A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© byr216 初级黑马   /  2015-8-11 16:39  /  397 人查看  /  3 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. package com.knowyou.reflect;

  2. import java.lang.reflect.Constructor;
  3. import java.lang.reflect.Field;
  4. import java.lang.reflect.Method;
  5. /**
  6. *
  7. * 利用反射把一个对象的属性值copy给新的对象
  8. * @author byr216
  9. *
  10. */
  11. public class ReflectTest2 {
  12.         public Object copyStudent(Student st) throws Exception {

  13.                 Class<?> stClass = st.getClass();// 获取对象的class对象
  14.                 Object stObject = stClass.newInstance(); // 创建获取到的class对象的实例

  15.                 // Constructor ct = stClass.getConstructor(String.class, int.class);
  16.                 // Object stObject = ct.newInstance("lisi",45);
  17.                 // System.out.println(ct.getDeclaringClass());

  18.                 Field[] fields = stClass.getDeclaredFields();// 获取获取到的class对象的私有属性集合

  19.                 for (Field field : fields) { // 遍历获取到的属性,并把传入的对象的属性值赋给新对象
  20.                         String m = field.getName(); // 获取属性的名字
  21.                         String setName = "set" + m.substring(0, 1).toUpperCase()
  22.                                         + m.substring(1); // 获取类的set方法名
  23.                         String getName = "get" + m.substring(0, 1).toUpperCase()
  24.                                         + m.substring(1);// 获取类的get方法名
  25.                         Method setMethod = stClass.getMethod(setName, field.getType()); // 获取类的set方法
  26.                         Method getMethod = stClass.getMethod(getName, new Class[0]); // 获取类的get方法
  27.                         Object getField = getMethod.invoke(st, new Object[0]); // 获取传入对象的属性值
  28.                         setMethod.invoke(stObject, getField);// 把获取传入对象的属性值赋给新对象
  29.                 }

  30.                 return stObject;
  31.         }

  32.         public static void main(String[] args) throws Exception {
  33.                 ReflectTest2 rc = new ReflectTest2();
  34.                 Student st = new Student("zhangsan", 23);
  35.                 Student ob = (Student) rc.copyStudent(st);
  36.                 System.out.println(ob.getName() + ":" + ob.getId());
  37.         }
  38. }

  39. class Student {
  40.         private String name;
  41.         private int id;

  42.         public Student() {

  43.         }

  44.         public Student(String name, int id) {
  45.                 this.name = name;
  46.                 this.id = id;
  47.         }

  48.         public String getName() {
  49.                 return name;
  50.         }

  51.         public void setName(String name) {
  52.                 this.name = name;
  53.         }

  54.         public int getId() {
  55.                 return id;
  56.         }

  57.         public void setId(int id) {
  58.                 this.id = id;
  59.         }

  60. }
复制代码


3 个回复

倒序浏览
感觉代码好长啊,对于新人来说。
回复 使用道具 举报
{:3_46:}{:3_46:}{:3_46:}{:3_46:}
回复 使用道具 举报
{:2_34:}..................
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马