首页 文章 精选 留言 我的

精选列表

搜索[HTTP/2],共10000篇文章
优秀的个人博客,低调大师

Android 开发中的代码片段(2)复制对象之间的属性值

前言 开发中会遇到这样的一个情况,我们得到一个dto对象,里面有几十个属性值,需要将这几十个属性值的N个通过VO传输另外一个地方,一般我们的做法是: 创建VO类,new vo() 对象,通过vo.set(dto.get)的方式不断的设置值。 但是这种方式在属性少量的情况之下还是没有问题,但是在属性不断变化的情况下就令人烦恼了,但是我们可以选择使用反射来完成A对象拷贝到B对象的这一过程。 其主要原理是通过反射获取到A对象的get方法和数据类型,然后截取get之后的字符串,拼接成set方法,再通过反射调用B的set方法和传值。 代码 public class CopyPropertiesUtil { /** * 利用反射实现对象之间属性复制 * * @param from * @param to */ public static void copyProperties(Object from, Object to) throws Exception { copyPropertiesExclude(from, to, null); } /** * 复制对象属性 * * @param from * @param to * @param excludsArray 排除属性列表 * @throws Exception */ @SuppressWarnings("unchecked") public static void copyPropertiesExclude(Object from, Object to, String[] excludsArray) throws Exception { List<String> excludesList = null; if (excludsArray != null && excludsArray.length > 0) { excludesList = Arrays.asList(excludsArray); //构造列表对象 } Method[] fromMethods = from.getClass().getDeclaredMethods(); Method[] toMethods = to.getClass().getDeclaredMethods(); Method fromMethod = null, toMethod = null; String fromMethodName = null, toMethodName = null; for (int i = 0; i < fromMethods.length; i++) { fromMethod = fromMethods[i]; fromMethodName = fromMethod.getName(); if (!fromMethodName.contains("get") || fromMethodName.contains("getId")) continue; //排除列表检测 if (excludesList != null && excludesList.contains(fromMethodName.substring(3).toLowerCase())) { continue; } toMethodName = "set" + fromMethodName.substring(3); toMethod = findMethodByName(toMethods, toMethodName); if (toMethod == null) continue; Object value = fromMethod.invoke(from, new Object[0]); if (value == null) continue; //集合类判空处理 if (value instanceof Collection) { Collection newValue = (Collection) value; if (newValue.size() <= 0) continue; } toMethod.invoke(to, new Object[]{value}); } } /** * 对象属性值复制,仅复制指定名称的属性值 * * @param from * @param to * @param includsArray * @throws Exception */ @SuppressWarnings("unchecked") public static void copyPropertiesInclude(Object from, Object to, String[] includsArray) throws Exception { List<String> includesList = null; if (includsArray != null && includsArray.length > 0) { includesList = Arrays.asList(includsArray); //构造列表对象 } else { return; } Method[] fromMethods = from.getClass().getDeclaredMethods(); Method[] toMethods = to.getClass().getDeclaredMethods(); Method fromMethod = null, toMethod = null; String fromMethodName = null, toMethodName = null; for (int i = 0; i < fromMethods.length; i++) { fromMethod = fromMethods[i]; fromMethodName = fromMethod.getName(); if (!fromMethodName.contains("get")) continue; //排除列表检测 String str = fromMethodName.substring(3); if (!includesList.contains(str.substring(0, 1).toLowerCase() + str.substring(1))) { continue; } toMethodName = "set" + fromMethodName.substring(3); toMethod = findMethodByName(toMethods, toMethodName); if (toMethod == null) continue; Object value = fromMethod.invoke(from, new Object[0]); if (value == null) continue; //集合类判空处理 if (value instanceof Collection) { Collection newValue = (Collection) value; if (newValue.size() <= 0) continue; } toMethod.invoke(to, new Object[]{value}); } } /** * 从方法数组中获取指定名称的方法 * * @param methods * @param name * @return */ public static Method findMethodByName(Method[] methods, String name) { for (int j = 0; j < methods.length; j++) { if (methods[j].getName().equals(name)) return methods[j]; } return null; } } 最后 未完待续、敬请期待!我的博客地址 FullScreenDeveloper

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册