使用反射复制一个JavaBean的对象
先看代码吧:
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的对象相关推荐
- coreldraw x4如何重叠图片_CorelDRAW复制及镜面反转对象
复制的设计都是由简单的图案和基础的操作堆砌而成的,如何恰当地使用这些基础操作,就是各位新学者要格外注意的地方. 这次我们介绍CorelDRAW中的复制和镜面操作. 一.复制 1.复制单个对象 使用Co ...
- java-利用反射做一个将javabean对象转为json的小工具(v1)
java-利用反射做一个将javabean对象转为json字符串的小工具(v1) 解决思路 1 利用反射机制获取对象的所有字段 2 遍历,将字段名和值按照一定格式添加到字符串中 所需知识 1 反射基础 ...
- php javabean对象,Struts2 bean标签:创建并示例化一个JavaBean对象
bean 标签也是一个十分常用的标签,它与 JSP 中的 动作类似,主要用于创建并示例化一个 JavaBean 对象,对于 JavaBean 中的属性可以通过 param 标签对其赋值. 语法: // ...
- java获取object属性值_java反射获取一个object属性值代码解析
有些时候你明明知道这个object里面是什么,但是因为种种原因,你不能将它转化成一个对象,只是想单纯地提取出这个object里的一些东西,这个时候就需要用反射了. 假如你这个类是这样的: privat ...
- 一个JavaBean和DTO转换的优秀案例
所有的JavaBean和DTO的互相转换接口,JavaBean转化成DTO或者DTO转换JavaBean: public abstract class Converter<A, B> {p ...
- 一周一论文(翻译 总结)—— [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 ...
- java复制一个对象_Java中对象的复制
假如说你想复制一个简单变量.很简单: 1 int n = 5;2 int m = n; 不仅仅是int类型,其它七种原始数据类型(boolean,char,byte,short,float,doubl ...
- java基础—IO流——复制一个文件到当前文件夹中
复制一个文件到当前文件夹中 import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWr ...
- Java 数组的拷贝(复制一个相同数组)
在上一篇博客中,浅谈了 关于 java 中数组的创建,遍历,打印相关问题,这一篇想谈一谈 java 中 数组的拷贝 问题,C语言中数组是直接在内存上给相应变量一定大小的空间,对数组的赋值,改变是直接在 ...
最新文章
- keras构建前馈神经网络(feedforward neural network)进行分类模型构建并加入L2正则化
- IT人的理性、激情与爱情
- 【模型训练】如何选择最适合你的学习率变更策略
- IDL关系运算符Eq Ne Le Lt Gt Ge含义说明
- 每天学一点儿shell:猜数字游戏
- Nacos源码BeatInfo
- linux下开发python爬虫_linux入门教程—开发常用命令
- 4、表单和高级选择器
- 20210119:力扣第42周双周赛(下)
- Flash制作空战游戏
- kotlin android中文文档,Kotlin(android)协程中文翻译
- STM32 串口通讯及实现
- 3日线与5日线金叉买入法
- 8700k能装服务器系统吗6,i7 8700k能装win7吗?搭配b365主板装win7操作步骤
- 使用js实时统计text、textarea等输入框的字数,并进行字数限制
- 部署blog的时候,出现了以下错误
- 锐龙cpu能装linux吗,AMD CPU怎么安装?AMD锐龙处理器与主板安装图解教程
- 计算机老师新年贺卡祝福语,新年贺卡祝福语老师大全
- 企业文化在企业管理中的作用
- 【maven】maven是什么?maven安装及idea中使用maven
热门文章
- JQuery判断元素是否存在
- Mac OS X搭建C#开发环境
- 【PyQt】分析承载界面
- VC++ (二)类的访问级别
- ORM Model查询页生成
- SysUtils.StrLCat
- 【网络安全工程师面试合集】——网络安全基础知识大总结
- mongo报错WiredTiger.wt, connection: /data/db/WiredTiger.wt: handle-open: open: Operation not permitted
- 阿里天池_优秀策略答辩PPT和相关博客
- 玩转大数据可视化,推荐几个必学的工具