先看代码吧:

package com.java.study; import java.io.Serializable; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class ReflectTester { public Object copy(Object object) throws IllegalArgumentException, SecurityException, InstantiationException, IllegalAccessException, InvocationTargetException, NoSuchMethodException { Class classType = object.getClass();//获得对象的类型 System.out.println("Class:" + classType.getName()); //通过默认的构造函数创建一个新的对象 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()方法 Method getMethod = classType.getMethod(getMethodName, new Class[]{}); //获得和属性对应的setXXX()方法 Method setMethod = classType.getMethod(setMethodName, new Class[]{field.getType()}); //调用原对象的getXXX()方法 Object value = getMethod.invoke(object, new Object[]{}); System.out.println(fieldName + ":" + value); //调用复制对象的setXXX()方法 setMethod.invoke(objectCopy, new Object[]{value}); } return objectCopy; } public static void main(String[] args) throws IllegalArgumentException, SecurityException, InstantiationException, IllegalAccessException, InvocationTargetException, NoSuchMethodException { Customer1 customer = new Customer1("tom",21); customer.setId(new Long(1)); Customer1 customerCopy = (Customer1) new ReflectTester().copy(customer); System.out.println("Copy information:" + customerCopy.getName()+ "" +customerCopy.getAge()); } } class Customer1 implements Serializable { private Long id; private String name; private int age; public Customer1() {} public Customer1(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; } }

代码中有一个Customer1的JavaBean,通过反射复制了一个Customer1类的对象,为customerCopy,程序中的new Class[] { }是一种快捷方式,获得方法的引用。[]中用来放参数,{}里面可以放置方法的返回类型。new Class[] { }相当于new class("构造函数参数").newinstance.

//调用原对象的getXXX()方法
      Object value = getMethod.invoke(object, new Object[]{});
      System.out.println(fieldName + ":" + value);

用来获得特定对象的特定方法。

转载于:https://www.cnblogs.com/JPAORM/archive/2012/05/12/2510253.html

使用反射复制一个JavaBean的对象相关推荐

  1. coreldraw x4如何重叠图片_CorelDRAW复制及镜面反转对象

    复制的设计都是由简单的图案和基础的操作堆砌而成的,如何恰当地使用这些基础操作,就是各位新学者要格外注意的地方. 这次我们介绍CorelDRAW中的复制和镜面操作. 一.复制 1.复制单个对象 使用Co ...

  2. java-利用反射做一个将javabean对象转为json的小工具(v1)

    java-利用反射做一个将javabean对象转为json字符串的小工具(v1) 解决思路 1 利用反射机制获取对象的所有字段 2 遍历,将字段名和值按照一定格式添加到字符串中 所需知识 1 反射基础 ...

  3. php javabean对象,Struts2 bean标签:创建并示例化一个JavaBean对象

    bean 标签也是一个十分常用的标签,它与 JSP 中的 动作类似,主要用于创建并示例化一个 JavaBean 对象,对于 JavaBean 中的属性可以通过 param 标签对其赋值. 语法: // ...

  4. java获取object属性值_java反射获取一个object属性值代码解析

    有些时候你明明知道这个object里面是什么,但是因为种种原因,你不能将它转化成一个对象,只是想单纯地提取出这个object里的一些东西,这个时候就需要用反射了. 假如你这个类是这样的: privat ...

  5. 一个JavaBean和DTO转换的优秀案例

    所有的JavaBean和DTO的互相转换接口,JavaBean转化成DTO或者DTO转换JavaBean: public abstract class Converter<A, B> {p ...

  6. 一周一论文(翻译 总结)—— [DSN 18] RDMC A Reliable RDMA Multicast for Large Objects :一个面向大型对象的可靠的RDMA广播框架

    目录 Abstract 1.Introduction 2. Background On RDMA 3. High level RDMC summary 4. System Design 4.1 Ext ...

  7. java复制一个对象_Java中对象的复制

    假如说你想复制一个简单变量.很简单: 1 int n = 5;2 int m = n; 不仅仅是int类型,其它七种原始数据类型(boolean,char,byte,short,float,doubl ...

  8. java基础—IO流——复制一个文件到当前文件夹中

    复制一个文件到当前文件夹中 import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWr ...

  9. Java 数组的拷贝(复制一个相同数组)

    在上一篇博客中,浅谈了 关于 java 中数组的创建,遍历,打印相关问题,这一篇想谈一谈 java 中 数组的拷贝 问题,C语言中数组是直接在内存上给相应变量一定大小的空间,对数组的赋值,改变是直接在 ...

最新文章

  1. keras构建前馈神经网络(feedforward neural network)进行分类模型构建并加入L2正则化
  2. IT人的理性、激情与爱情
  3. 【模型训练】如何选择最适合你的学习率变更策略
  4. IDL关系运算符Eq Ne Le Lt Gt Ge含义说明
  5. 每天学一点儿shell:猜数字游戏
  6. Nacos源码BeatInfo
  7. linux下开发python爬虫_linux入门教程—开发常用命令
  8. 4、表单和高级选择器
  9. 20210119:力扣第42周双周赛(下)
  10. Flash制作空战游戏
  11. kotlin android中文文档,Kotlin(android)协程中文翻译
  12. STM32 串口通讯及实现
  13. 3日线与5日线金叉买入法
  14. 8700k能装服务器系统吗6,i7 8700k能装win7吗?搭配b365主板装win7操作步骤
  15. 使用js实时统计text、textarea等输入框的字数,并进行字数限制
  16. 部署blog的时候,出现了以下错误
  17. 锐龙cpu能装linux吗,AMD CPU怎么安装?AMD锐龙处理器与主板安装图解教程
  18. 计算机老师新年贺卡祝福语,新年贺卡祝福语老师大全
  19. 企业文化在企业管理中的作用
  20. 【maven】maven是什么?maven安装及idea中使用maven

热门文章

  1. JQuery判断元素是否存在
  2. Mac OS X搭建C#开发环境
  3. 【PyQt】分析承载界面
  4. VC++ (二)类的访问级别
  5. ORM Model查询页生成
  6. SysUtils.StrLCat
  7. 【网络安全工程师面试合集】——网络安全基础知识大总结
  8. mongo报错WiredTiger.wt, connection: /data/db/WiredTiger.wt: handle-open: open: Operation not permitted
  9. 阿里天池_优秀策略答辩PPT和相关博客
  10. 玩转大数据可视化,推荐几个必学的工具