简单的Java反射代码_Java反射之复制简单的JavaBean对象 | 学步园

import java.lang.reflect.Constructor;

import java.lang.reflect.Field;

import java.lang.reflect.Method;

/**

* 通过反射机制来复制JavaBean对象

* @author WalkingDog

*

*/

public class Reflect {

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

Person person = new Person("walkingdog", 20);

person.setId(2009324116L);

Person personCopy = (Person)new Reflect().copy(person);

System.out.println(personCopy.getId() + " " + personCopy.getName() + " " + personCopy.getAge());

}

public Object copy(Object object) throws Exception{

//要想使用反射,首先需要获得待处理类或对象所对应的Class对象

//下面是获取Class对象的常用的3种方式

//获得运行时的类

Class> classType = object.getClass();

//Class> classType = Costomer.class;

//Class> classType = Class.forName("Costomer");

Constructor> constructor = classType.getConstructor(new Class>[]{});

Object objectCopy = constructor.newInstance(new Object[]{});

//以上两行代码等价于下面一行代码,newInstance()只能通过无参构造方法建立对象。

//Object objectCopy = classType.newInstance();

Field fields[] = classType.getDeclaredFields();

for(Field field : fields){

String name = field.getName();

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

//获得属性的set、get的方法名

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()});

//获得copy对象的属性值

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

//设置被copy对象的属性值

setMethod.invoke(objectCopy, value);

}

return objectCopy;

}

}

//JavaBean

class Person{

private Long id;

private String name;

private int age;

//每个JavaBean都应该实现无参构造方法

public Person() {}

public Person(String name, int age){

this.name = name;

this.age = age;

}

//setter、getter方法

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值