`
遐想英灵
  • 浏览: 10056 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

记录代码:复制对象的值,返回一个新的实例

阅读更多
业务需要,要把一个对象中的值封装到另一个对象中。所以自己写了一个转换工具,而没使用BeanUtils.copyProperties()。
以后可以参考类似思路进行Vo、Bo、Po等封装类的转换。

代码例子如下,仅列出大概思路:
public class VoConvertUtil {

/**
* 将指定Vo中的属性值转移到另一个Vo中,只有相同名称的属性才能转移
*
* @param desObj
*            目标Vo对象,可以是一个new出的实例
* @param srcObj
*            源Vo对象
* @return 转移后的新Vo对象
* @throws 自行封装的Exception
*/
public static Object convertVoToVo(Object desObj, Object srcObj)
throws 自行封装的Exception {
BeanInfo bi = null;
Method method = null;
try {
bi = Introspector.getBeanInfo(desObj.getClass());
PropertyDescriptor[] pds = bi.getPropertyDescriptors();
for (PropertyDescriptor pd : pds) {
String methodName = "get"
+ pd.getName().substring(0, 1).toUpperCase()
+ pd.getName().substring(1);
try {
method = srcObj.getClass().getDeclaredMethod(methodName);
} catch (NoSuchMethodException e) {
continue;
}
Object srcValue = method.invoke(srcObj);
if (null != srcValue && null != pd.getWriteMethod()
&& !"getClass".equals(methodName)) {
pd.getWriteMethod().invoke(desObj, srcValue);
} else {
continue;
}
}
} catch (IntrospectionException e) {
throw new 自行封装的Exception(e);
} catch (SecurityException e) {
throw new 自行封装的Exception(e);
} catch (IllegalArgumentException e) {
throw new 自行封装的Exception(e);
} catch (IllegalAccessException e) {
throw new 自行封装的Exception(e);
} catch (InvocationTargetException e) {
throw new 自行封装的Exception(e);
}
return desObj;
}

public static Object formatVoPropertyToBlank(Object vo)
throws 自行封装的Exception {
BeanInfo bi = null;
try {
bi = Introspector.getBeanInfo(vo.getClass());
PropertyDescriptor[] pds = bi.getPropertyDescriptors();
for (PropertyDescriptor pd : pds) {
Object propertyValue = pd.getReadMethod().invoke(vo);
if (null == propertyValue) {
if ("class java.lang.String".equals(pd.getPropertyType()
.toString())) {
pd.getWriteMethod().invoke(vo, "");
} else if ("class java.math.BigDecimal".equals(pd.getPropertyType()
.toString())) {
pd.getWriteMethod().invoke(vo, new BigDecimal(0));
}
} else {
continue;
}
}
} catch (IntrospectionException e) {
throw new 自行封装的Exception(e);
} catch (IllegalArgumentException e) {
throw new 自行封装的Exception(e);
} catch (IllegalAccessException e) {
throw new 自行封装的Exception(e);
} catch (InvocationTargetException e) {
throw new 自行封装的Exception(e);
}
return vo;
}

}
0
0
分享到:
评论

相关推荐

    JAVA上百实例源码以及开源项目源代码

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    javascript文档

    赋值运算符 (=) 将一个值赋给变量。 atan 方法 返回一个数的反正切。 atan2 方法 返回从 X 轴到点 (y, x)的角度(以弧度为单位)。 atEnd 方法 返回一个指示枚举算子是否处于集合结束处的 Boolean 值。 big ...

    JScript 语言参考

    赋值运算符 (=) 将一个值赋给变量。 atan 方法 返回一个数的反正切。 atan2 方法 返回从 X 轴到点 (y, x)的角度(以弧度为单位)。 atEnd 方法 返回一个指示枚举算子是否处于集合结束处的 Boolean 值。 big ...

    微软JavaScript手册

    赋值运算符 (=) 将一个值赋给变量。 atan 方法 返回一个数的反正切。 atan2 方法 返回从 X 轴到点 (y, x)的角度(以弧度为单位)。 atEnd 方法 返回一个指示枚举算子是否处于集合结束处的 Boolean 值。 big ...

    JAVA上百实例源码以及开源项目

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    c# 加密和解密相关代码

    value:一个Unicode 字符。 设 计过程 (1)打开Visual Studio 2008 开发环境,新建一个Windows窗体应用程序,并将其命名为ROT13Encrypt。 (2)更改默认窗体Form1 的Name 属性为Frm_Main,在该窗体中添加两个...

    超级有影响力霸气的Java面试题大全文档

     SessionBean: Stateless Session Bean 的生命周期是由容器决定的,当客户机发出请求要建立一个Bean的实例时,EJB容器不一定要创建一个新的Bean的实例供客户机调用,而是随便找一个现有的实例提供给客户机。...

    【05-面向对象(下)】

    •==和equals比较运算符:==要求两个引用变量指向同一个对象才会返回true。equals方法则允许用户提供自 定义的相等规则。 •Object类提供的equals方法判断两个对象相等的标准与==完全相同。因此开发者通常需要...

    java 面试题 总结

    对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以...

    C#基类库(苏飞版)

    18.创建 OracleCommand 对象实例(用来返回一个整数值) 复制代码 6.DbHelperSQLite类 [code=csharp] 1.数据访问基础类(基于SQLite),主要是用来访问SQLite数据库的。 2.得到最大值;是否存在;是否存在(基于...

    最全C#基础类库

    18.创建 OracleCommand 对象实例(用来返回一个整数值) 复制代码 6.DbHelperSQLite类 [code=csharp] 1.数据访问基础类(基于SQLite),主要是用来访问SQLite数据库的。 2.得到最大值;是否存在;是否存在(基于...

    程序天下:JavaScript实例自学手册

    6.5 从一个下拉列表往另一个下拉列表添加内容 6.6 改变列表项的上下顺序 6.7 给下拉框数据分组 6.8 获取列表框的选择 6.9 类IE下拉框 6.10 下拉框式邮件发送 6.11 获取多选框的选择项 6.12 手动调整的列表框 6.13 ...

    arcgis工具

    (补充其他工具:Union,把多个图斑联合起来并形成一个新的连接在一起的图斑,原图斑无变化,联合后的图斑不继承原任何图斑的属性;Merge,把多个图斑合并到其中一个图斑上并继承它的属性,原图斑变化;Split用于间断...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    实例014 使当前项目依赖另一个项目 21 1.3 界面设计器 22 实例015 安装界面设计器 22 实例016 设计Windows系统的运行对话框 界面 23 实例017 设计计算器程序界面 26 实例018 设计关于进销存管理系统的界面 27 第2章 ...

Global site tag (gtag.js) - Google Analytics