方法1:把JavaBean的from的值自动set给to,省略了自己从from中get然后再set给to

import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;

public static Object convertBean2Bean(Object from, Object to) {
try {
BeanInfo beanInfo = Introspector.getBeanInfo(to.getClass());
PropertyDescriptor[] ps = beanInfo.getPropertyDescriptors(); for (PropertyDescriptor p : ps) {
Method getMethod = p.getReadMethod();
Method setMethod = p.getWriteMethod();
if (getMethod != null && setMethod != null) {
try {
Object result = getMethod.invoke(from);
setMethod.invoke(to, result);
} catch (Exception e) {
// 如果from没有此属性的get方法,跳过
continue;
}
}
}
} catch (Exception e) {
e.printStackTrace();
} return to;
} 方法2:
/**
* 不支持to继承(to是其他bean的子类)
*/

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

   public static Object coverBean2Bean(Object from, Object to) {
Class fClass = from.getClass();
Class tClass = to.getClass();
// 拿to所有属性(如果有继承,父类属性拿不到)
Field[] cFields = tClass.getDeclaredFields();
try {
for (Field field : cFields) {
String cKey = field.getName();
// 确定第一个字母大写
cKey = cKey.substring(0, 1).toUpperCase() + cKey.substring(1); Method fMethod;
Object fValue;
try {
fMethod = fClass.getMethod("get" + cKey);// public方法
fValue = fMethod.invoke(from);// 取getfKey的值
} catch (Exception e) {
// 如果from没有此属性的get方法,跳过
continue;
} try {
// 用fMethod.getReturnType(),而不用fValue.getClass()
// 为了保证get方法时,参数类型是基本类型而传入对象时会找不到方法
Method cMethod = tClass.getMethod("set" + cKey, fMethod.getReturnType());
cMethod.invoke(to, fValue);
} catch (Exception e) {
// 如果to没有此属性set方法,跳过
continue;
}
}
} catch (Exception e) {
e.printStackTrace();
} return to;
} 3.打印bean /** * 打印bean信息
*/
public static void printInvoke(Object object) {
Method[] ms = object.getClass().getMethods();
String str = spare;
str += "start log object: " + object.getClass().getSimpleName() + "\r\n";
str += spare;
System.out.print(str); for (int i = 0; i < ms.length; i++) {
if (ms[i].getName().indexOf("get") != -1
&& !ms[i].getName().equals("getClass")) {
try {
System.out.println(ms[i].getName() + " = "
+ ms[i].invoke(object));
} catch (Exception e) {
e.printStackTrace();
}
}
} System.out.println(spare);
}

javabean对象自动赋值给另一个javabean对象的更多相关文章

  1. Python把同一个对象循环赋值给另外一个变量

    Python把同一个对象循环赋值给另外一个变量,修改一个对象,其他对象也修改了 >>> row=['_'] * 3 >>> board = [] >>& ...

  2. 利用反射实现JavaBean的自动赋值

    最近开发公司的一个项目,因项目不是很大的项目,所以仅仅采用了spring MVC框架,但是数据库很多表中的字段至少15个,这样当每次将数据库表中的数据取出来放入javabean中时,写setXXX方法 ...

  3. 复制JAVABEAN中的属性到另外一个JAVABEAN中

    下午写了一个属性复制方法,记录如下: class POUtil{ /** * * Function : 将一个source中的属性到复制到dest * @author : Liaokailin * C ...

  4. 不可或缺 Windows Native (19) - C++: 对象的动态创建和释放, 对象的赋值和复制, 静态属性和静态函数, 类模板

    [源码下载] 不可或缺 Windows Native (19) - C++: 对象的动态创建和释放, 对象的赋值和复制, 静态属性和静态函数, 类模板 作者:webabcd 介绍不可或缺 Window ...

  5. 如何复制一个java对象(浅克隆与深度克隆)

    在项目中,有时候有一些比较重要的对象经常被当作参数传来传去,和C语言的值传递不同,java语言的传递都是引用传递,在任何一个地方修改了这个对象的值,就会导致这个对象在内存中的值被彻底改变.但是很多时候 ...

  6. C++中的对象的赋值和复制

    对象的赋值 如果对一个类定义了两个或多个对象,则这些同类的对象之间可以互相赋值,或者说,一个对象的值可以赋给另一个同类的对象.这里所指的对象的值是指对象中所有数据成员的值. 对象之间的赋值也是通过赋值 ...

  7. 实现了IEnumerable接口的GetEnumerator 即可使用 Foreach遍历,返回一个IEnumerator对象

    #region 程序集 mscorlib.dll, v4.0.0.0 // C:\Program Files (x86)\Reference Assemblies\Microsoft\Framewor ...

  8. C++ 对象的赋值和复制 基本的

    对象的赋值 如果对一个类定义了两个或多个对象,则这些对象之间是可以进行赋值,或者说,一个对象的值可以赋值给另一个同类的对象.这里所指的值是指对象中所有数       据的成员的值.对象之间进行赋值是“ ...

  9. 利用dynamic解决匿名对象不能赋值的问题

    原文:利用dynamic解决匿名对象不能赋值的问题 关于匿名对象 匿名对象是.Net Framework 3.0提供的新类型,例如: }; 就是一个匿名类,搭配Linq,可以很灵活的在代码中组合数据, ...

随机推荐

  1. (原)安装windows8.1和ubuntu16双系统及相互访问磁盘

    转载请注明出处: http://www.cnblogs.com/darkknightzh/p/5638232.html 参考网址: http://jingyan.baidu.com/article/f ...

  2. makefile 单独编译一个文件

    #!/sh/bin .SUFFIXES:.c.o CDIR = /Users/shelley/c BINDIR = $(CDIR)/bin CC = gcc CFLAGS = -g -O RM = r ...

  3. Win7网络检测 WindowsAPICodePack

    原文:http://www.cnblogs.com/yincheng01/archive/2010/05/30/2213234.html 在Windows7操作系统下,支持的网络类型越来越复杂,微软提 ...

  4. windows环境下搭建Cocos2d-X开发环境

    最近终于有时间可心搞搞自己的东西了,呵呵,那就开始做个手机小游戏给孩子玩吧. 首先必须选定开发的框架,移动终端开源的游戏框架貌似不多,找来找去也就这个了,名字简单Cocos2d-X,是Cocos2d国 ...

  5. How To Compile Qt with Visual Studio 2010

    This post is a step-by-step guide on how to compile Qt 4.x.x with MSVC 2010. Although we use Qt 4.7. ...

  6. 怎样在Github参与一个开源项目

    转载:http://www.csdn.net/article/2014-04-14/2819293-Contributing-to-Open-Source-on-GitHub 最近一年开源项目特别的热 ...

  7. vhd镜像格式及vhd-util工具应用

    概述 VHD 是微软虚拟磁盘文件格式,qemu和tapdisk2都能支持VHD镜像格式,不仅提供基本的虚拟机卷功能,还可提供磁盘快照.磁盘扩容等高级功能 vhd-util是个linux下的开源软件,通 ...

  8. [Ext JS 4] 实战之多选下拉单 (带checkbox)

    前言 Ext js 创建一个多选下拉单的方式很简单, 使用Ext.form.ComboBox, 设置 multiSelect 为true 就可以了. 但是如果要在每个下拉之前加上一个checkbox, ...

  9. 找不到eth0,但能找到eth1的问题解决办法

    故障现象:Linux的网卡由eth0变成了eth1,如何修复?解决方案:在linux中,udev记录网络规则的脚本为:/etc/udev/rules.d/70-persistent-net.rules ...

  10. FreeMarker的模板文件语法

    FreeMarker的模板文件并不比HTML页面复杂多少,FreeMarker模板文件主要由如下4个部分组成: 1,文本:直接输出的部分 2,注释:<#-- ... -->格式部分,不会输 ...