反射ReflectTester

来源:互联网 发布:围棋比赛编排软件 编辑:程序博客网 时间:2024/06/11 19:06

 

import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class ReflectTester
{
 // 该方法实现对Customer对象的拷贝操作
 public Object copy(Object object) throws Exception
 {

  //第一种方法:用类名.class来获得class类
  //第二种方法:用对象.getclaa来获得class类
  Class<?> classType = object.getClass();
  
  //通过拿到的类可以创建一个实例对象
  Object objectCopy = classType.getConstructor(new Class[] {})
    
  .newInstance(new Object[] {});
  // 以上两行代码等价于下面一行
    // Object obj2 = classType.newInstance();

    // System.out.println(obj);
  // 获得对象的所有成员变量
  //返回一个 Field 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明字段。
  //下面是得到一个字段
  //Field field = classType.getDeclaredField("name");
  //得到所有字段,返回是数组
  Field[] fields = classType.getDeclaredFields();

  for (Field field : fields)
  {
   String name = field.getName();

   String firstLetter = name.substring(0, 1).toUpperCase();// 将属性的首字母转换为大写

   String getMethodName = "get" + firstLetter + name.substring(1);
   String setMethodName = "set" + firstLetter + name.substring(1);

   Method getMethod = classType.getMethod(getMethodName,
     new Class[] {});
   Method setMethod = classType.getMethod(setMethodName,
     new Class[] { field.getType() });

   Object value = getMethod.invoke(object, new Object[] {});

   setMethod.invoke(objectCopy, new Object[] { value });
  }

  

  return objectCopy;
 }

 public static void main(String[] args) throws Exception
 {
  Customer customer = new Customer("Tom", 20);
  customer.setId(1L);

  ReflectTester test = new ReflectTester();

  Customer customer2 = (Customer) test.copy(customer);

  System.out.println(customer2.getId() + "," + customer2.getName() + ","
    + customer2.getAge());
 }
}

class Customer
{
 private Long id;

 private String name;

 private int age;

 public Customer()
 {

 }

 public Customer(String name, int age)
 {
  this.name = name;
  this.age = age;
 }

 public Long getId()
 {
  return id;
 }

 public void setId(Long id)
 {
  this.id = id;
 }

 public String getName()
 {
  return name;
 }

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

 public int getAge()
 {
  return age;
 }

 public void setAge(int age)
 {
  this.age = age;
 }
}

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 ps直线工具变成箭头了怎么办 笔记本图形处理速度慢怎么办 微信语音发不出去怎么办 ps里的图层锁定怎么办 ps图层丢失了怎么办 PS标题画面太小怎么办 轮胎蹭掉一块皮怎么办 吃香蕉吃的胃难受怎么办 qq糖卡在喉咙里怎么办 头发上粘到了qq糖怎么办 老房子土墙掉土怎么办 速写画的太慢怎么办 艺术生文化课没过线怎么办 5岁儿童坐飞机忘带证件怎么办 儿童坐飞机没带证件怎么办 儿童坐飞机没带户口本怎么办 儿童坐飞机没有带户口本怎么办 刚打蜡的车下雨怎么办 飞机票不能退票不能改签怎么办 深圳航空买机票姓名错了怎么办 大众cc打不着火怎么办 手上扎了仙人掌刺怎么办 pscs5界面字体太小怎么办 儿童做飞机没带户口本怎么办 黑户口想做飞机怎么办 宝宝坐飞机忘记带证件怎么办 值机柜台关闭了怎么办 值机迟到几分钟怎么办 婴儿坐飞机没带证件怎么办 飞机票买了一天降价1000怎么办 社保卡磁性没了怎么办 社保卡民族错了怎么办 坐飞机婴儿出生证明没带怎么办 手提行李超过5kg怎么办 随身行李超过5kg怎么办 南航机票填错身份证怎么办 两岁宝宝坐着驼背怎么办 两岁的宝宝坐晕车怎么办 在机场丢东西了怎么办 孩子放学不按时回家怎么办?转 右腿比左腿粗2cm怎么办