`
lionzm
  • 浏览: 12487 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

开发小分享

 
阅读更多
1.两个几乎相同的实体,只是有部分字段不同,此时需要从一个实体拷贝相同的数据到另一个实体,调用set方法去执行。
如果实体的成员变量很多 二三十个,那我们的代码就写二三十行。代码就会显得十分臃肿。

解决办法:
1. 使用反射的机制可以减少代码但是性能很差不推荐。
2. 使用BeanUtils.copyPropertie 或者 PropertyUtils.copyProperties 拷贝属性 ,性能也很不好
3. 使用 BeanCopier copier = BeanCopier.create(Bean1.class, Bean2.class, false); 定义后 再使用copier.copy(bean1, bean2, null);
性能几乎和写二三十个set的代码一样


2. Eclipse自动生成toString()方法,方便调试,


3. 自动生成对象属性值,用于单元测试。是否有在测试用例中定义一个对象然后赋值,如果这个对象的属性很多我们会见到如下代码:

      Org infoOrg = new Org();
      infoOrg.setOpCode("51");
      infoOrg.setZoneCode("755AA");
      infoOrg.setWaybillNo("002101012527");
      infoOrg.setBarScanTm(new Date("2014/3/25 8:20:00"));
      infoOrg.setOpAttachInfo("550103612904");
      infoOrg.setBarOprCode("264845");
      infoOrg.setCourierCode("136026");
      infoOrg.setPhoneZone("010AA");
      infoOrg.setPhone("85202056");
      infoOrg.setSubbillPieceQty(1);
      infoOrg.setWeightQty(38.20);
      infoOrg.setOtherInfo("T801");
    infoOrg.setDestZoneCode("766A");
 
代码中大量的调用set方法,部分属性不会影响测试用例但是又要有值,有什么方法可以在定义一个对象之后直接初始化呢?
下面这个类可以基本解决此烦恼
public class CreateObjectUtil {

public static void reflect(Object bean) {

try {
Field[] fields = bean.getClass().getDeclaredFields();

Method[] methods = bean.getClass().getMethods();

Set<String> methodNameSet = new HashSet<String>();

for (Method method : methods) {
methodNameSet.add(method.getName());
}

for (Field field : fields) {
String fieldName = field.getName();// 取出字段名称

String setMethodName = "set" + fieldName.substring(0, 1).toUpperCase()
+ fieldName.substring(1);
if (!methodNameSet.contains(setMethodName)) {
continue;
}

System.out.println(setMethodName);
Method method = bean.getClass().getDeclaredMethod(setMethodName);

if (field.getType().toString().equals("int")) {
method.invoke(bean, new Object[] { Integer.parseInt("20") });
} else {
method.invoke(bean, new Object[] { "ABC" });
}
System.out.println(bean);
}

} catch (Exception e) {
e.printStackTrace();
}
}

public static void fillingParam(Object obj) {

Field[] fields = obj.getClass().getDeclaredFields();// 根据Class对象获得属性
try { // 私有的也可以获得
for (Field f : fields) {
String proName = f.getName(); // 获取属性名称
Method[] methods = obj.getClass().getDeclaredMethods();
for (Method m : methods) {
String mName = m.getName().toLowerCase(); // 获取小写的方法的名称
if (mName.equals("set" + proName.toLowerCase())) { // 如果方法名称和属性的名称
if (f.getType().getName().contains("String")) { // f.getType().getName()

if (mName.contains("date")) {
m.invoke(obj, "20140401");
} else {
m.invoke(obj, proName);
}
} else if (f.getType().getName().contains("Date")) {
m.invoke(obj, new Date());
} else if (f.getType().getName().contains("Integer")) {
m.invoke(obj, 1);
} else if (f.getType().getName().contains("Set")) {
m.invoke(obj, new HashSet());
} else if (f.getType().getName().contains("List")) {
m.invoke(obj, new ArrayList());
} else if (f.getType().getName().contains("Map")) {
m.invoke(obj, new HashMap());
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}

}

public static void main(String[] args) {

ConveyanceShowEntity conveyanceShowEntity = new ConveyanceShowEntity();
ConveyanceEntity conveyanceEntity = new ConveyanceEntity();
TransportBatch transportBatch = new TransportBatch();
fillingParam(conveyanceShowEntity);
fillingParam(conveyanceEntity);
fillingParam(transportBatch);
EntityCopier.conveyanceShowcopier.copy(conveyanceEntity, conveyanceShowEntity, null);

}
}
分享到:
评论

相关推荐

    Unity3d C# 开发微信小游戏分享图片、朋友圈等功能实现源码

    开发一个游戏后,最佳的宣传途径就是...部分功能可能只支持Android手机,具体参照官网由于插件一直在更新中,接口和实现可能随时间变化会差异,本资源就是Unity3d C# 开发微信小游戏分享图片、朋友圈等功能实现源码。

    uni开发微信小程序解决全局分享分销问题

    uni开发微信小程序解决全局分享分销问题 1. 需求 1.小程序内每个页面都要打开胶囊分享按钮并实现分销 2.分享功能应该是在用户登录之后才予以打开 3.不想做在每个页面都写分享钩子的傻逼操作 2.实现 1.技术点: vueX ...

    全球首个微信小程序应用号开发教程大全免费分享

    微信小程序是一种轻量级的应用开发平台,由腾讯公司推出,旨在让开发者能够快速构建在微信内运行的应用。作为全球首个微信小程序应用号开发教程大全,它涵盖了从基础到高级的各种开发知识,帮助开发者全面掌握这一...

    SpringBoot 在线协同办公小程序开发项目实战课程分享

    通过本课程,你将掌握SpringBoot在在线协同办公场景下的实际应用,包括后端服务的构建、数据库操作、安全控制、实时通信以及前端小程序的开发。这将为你在开发类似项目时提供宝贵的经验和技术支持。

    软件开发分享,个人平时小积累

    【标题】:“软件开发分享,个人平时小积累” 在这个标题中,“软件开发分享”表明了内容涉及的是关于软件开发过程中的经验与知识分享,而“个人平时小积累”则暗示了这些内容是作者在日常工作中逐步积累的实用技巧...

    仿美食分享网站京细菜谱小程序源码 菜谱微信小程序源码云开发版

    京细菜谱是一个美食分享网站,提供优质的家常菜谱大全,仿京细菜谱小程序源码为喜欢美食的朋友提供了很多的美食烹饪教程,让您轻松学会做美食。对不同食材和地域的饮食做了不同的分类和详细的做菜方法,分类十分详细...

    android 微信分享小程序 图片处理

    在Android开发中,微信分享小程序是一项常见的功能,尤其在社交电商和内容分享场景下尤为重要。在实际操作中,我们可能会遇到一些图片处理方面的问题,比如图片显示不全、图片过大导致无法正常调起微信应用。本文将...

    微信小程序开发案例分享

    微信小程序开发案例分享

    微信云开发校园小程序

    这个小程序集成了多种功能,包括博客发布、二维码扫描以及用户登录系统,旨在为学生和教师提供便捷的信息分享和互动平台。 首先,我们要理解的是“微信小程序”。微信小程序是腾讯公司推出的一种轻量级应用开发框架...

    微信小程序分享.zip

    微信小程序分享功能是微信生态中一个重要的组成部分,它允许用户在使用小程序的过程中,将当前页面或者自定义的内容分享到微信的各个社交场景,如聊天、朋友圈等,从而提高产品的传播性和用户互动性。本资源“微信小...

    微信小程序-云开发的图书管理小程序

    8. **微信登录与授权**:图书管理小程序可能会集成微信的社交功能,用户可以通过微信账号一键登录,并且利用微信的社交关系链进行书籍分享等操作。 9. **页面路由与导航**:在小程序中,页面间的跳转和路由管理是...

    微信小程序开发工具

    10. **社区支持**:微信小程序拥有庞大的开发者社区,通过开发工具,开发者可以方便地获取到社区的资源和经验分享,解决问题,共同推动微信小程序生态的发展。 总的来说,微信小程序开发工具是一个全方位的开发平台...

    分享:微信开发调试小工具

    分享一款微信开发调试的小工具,可以直接VS设置断点,自动跳转到断点处

    小程序云开发个人博客

    《小程序云开发个人博客搭建详解》 随着移动互联网的发展,微信小程序因其轻量级、无需安装的特点,成为了众多开发者和企业构建应用的首选平台。本文将深入探讨如何利用小程序云开发构建一个个人博客系统,主要涉及...

    微信小游戏开发分享.pptx

    微信小游戏开发分享.pptx

    近2000张微信小程序开发常用的PNG图集分享-精美实用实惠

    这个近2000张PNG图集的分享为开发者提供了丰富的资源,涵盖了各种常用的图标,如icon图标和tabbar图标,适用于微信小程序以及一般的App开发。 1. **图标设计的重要性**: - 图标作为用户界面的重要组成部分,是...

    小试小程序云开发(小结)

    在分享功能方面,`onShareAppMessage`方法被定义,用于设置小程序的分享信息,如标题和分享路径,使得用户可以方便地将小程序内容分享给朋友或社交网络。 总的来说,小程序云开发简化了前后端分离的流程,使得前端...

    微信小程序开发附源码:vue-router history模式下的微信分享小结.doc

    微信小程序开发附源码:vue-router history模式下的微信分享小结

    校园流浪猫信息记录和分享的小程序源码/微信云开发中大猫谱小程序源码

    这是一套用于校园流浪猫信息记录和分享的小程序源码,微信云开发中大猫谱小程序源码。主要功能是创建校园猫猫档案,为猫猫上传照片,以及照片审核,人员管理等,并且可以拍照记录校园内猫猫的成长轨迹,该程序由渔政...

    基于微信小程序实现课程预约小程序源码分享

    小程序,开发工具导入项目即可查看源码分享 小程序是一个易上手的东西, 对于新手来说,多看官方文档,可以初步做出比较完整的小程序,正是因为简单上手,功能实现简单,小程序是越来越火,商业价值也越来越大。 1...

Global site tag (gtag.js) - Google Analytics