反射 黑马程序员

public class ReflectTester {

 public Object copy(Object object) throws Exception {

  // 获得对象的类型

  Class<?> classType = object.getClass();

  System.out.println("Class:" + classType.getName());

  // 通过默认构造方法创建一个新的对象,new Class[] {} 没参数表示用默认的构造方法

  Object objectCopy = classType.getConstructor(new Class[] {})

    .newInstance(new Object[] {});

  // 获得对象的所有属性,包括私有的

  Field fields[] = classType.getDeclaredFields();

  for (int i = 0; i < fields.length; i++) {

   Field field = fields[i];

   String fieldName = field.getName();

   String firstLetter = fieldName.substring(0, 1).toUpperCase();

   // 获得和属性对应的getXXX()方法的名字

   String getMethodName = "get" + firstLetter + fieldName.substring(1);

   // 获得和属性对应的setXXX()方法的名字

   String setMethodName = "set" + firstLetter + fieldName.substring(1);

   // 获得和属性对应的getXXX()方法 ,根据名字和参数取得对应的方法,getXXX()是没参数的,所以传个空的

   Method getMethod = classType.getMethod(getMethodName,

     new Class[] {});

   // 获得和属性对应的setXXX()方法,setXXX(Object obj),setXXX是有参数的,所以传当前字段的类型

   Method setMethod = classType.getMethod(setMethodName,

     new Class[] { field.getType() });

   // 调用原对象的getXXX()方法,调用getXXX()取得原对象的值

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

   System.out.println(fieldName + ":" + value);

   // 调用拷贝对象的setXXX()方法,调用新对象的setXXX()把值设置进去

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

  }

  return objectCopy;

 }

 public static void main(String[] args) throws Exception {

  Customer customer = new Customer("Shmilyzl", 25);

  customer.setId(new Long(1));

  Customer customerCopy = (Customer) new ReflectTester().copy(customer);

  System.out.println("Copy information:" + customerCopy.getId() + " "

    + customerCopy.getName() + " " + customerCopy.getAge());

 }

}

--------------------------------------------------------------------------------------------------

Customer类

--------------------------------------------------------------------------------------------------

package com.fahon.mytest;

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;

 }

}

--------------------------------------------------------------------------------------------------

执行结果

--------------------------------------------------------------------------------------------------

Class:com.fahon.mytest.Customer

id:1

name:Shmilyzl

age:25

Copy information:1 Shmilyzl 25

 

---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a><a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ----------------------

 

你可能感兴趣的:(程序员)