两个实体类 复制 copy 工具类
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Date; public class CopyBean{ /**
* 复制sour里属性不为空的值到obje为空的属性
*
* @param obje
* 目标实体类
* @param sour
* 源实体类
* @param isCover
* 是否保留obje类里不为null的属性值(保留源值,属性为null则赋值)
* @return obje
*/
public static Object Copy(Object obje, Object sour, boolean isCover) {
Field[] fields = sour.getClass().getDeclaredFields();
for (int i = 0, j = fields.length; i < j; i++) {
String propertyName = fields[i].getName();
Object propertyValue = getProperty(sour, propertyName);
if (isCover) {
if (getProperty(obje, propertyName) == null
&& propertyValue != null) {
Object setProperty = setProperty(obje, propertyName,
propertyValue);
}
} else {
Object setProperty = setProperty(obje, propertyName,
propertyValue);
} }
return obje;
} /**
* 得到值
*
* @param bean
* @param propertyName
* @return
*/
private static Object getProperty(Object bean, String propertyName) {
Class clazz = bean.getClass();
try {
Field field = clazz.getDeclaredField(propertyName);
Method method = clazz.getDeclaredMethod(
getGetterName(field.getName()), new Class[] {});
return method.invoke(bean, new Object[] {});
} catch (Exception e) {
}
return null;
} /**
* 给bean赋值
*
* @param bean
* @param propertyName
* @param value
* @return
*/
private static Object setProperty(Object bean, String propertyName,
Object value) {
Class clazz = bean.getClass();
try {
Field field = clazz.getDeclaredField(propertyName);
Method method = clazz.getDeclaredMethod(
getSetterName(field.getName()),
new Class[] { field.getType() });
return method.invoke(bean, new Object[] { value });
} catch (Exception e) {
}
return null;
} /**
* 根据变量名得到get方法
*
* @param propertyName
* @return
*/
private static String getGetterName(String propertyName) {
String method = "get" + propertyName.substring(0, 1).toUpperCase()
+ propertyName.substring(1);
return method;
} /**
* 得到setter方法
*
* @param propertyName
* 变量名
* @return
*/
private static String getSetterName(String propertyName) {
String method = "set" + propertyName.substring(0, 1).toUpperCase()
+ propertyName.substring(1);
return method;
} // public static void main(String[] args) {
// User u = new User();
// u.setId(1l);
// u.setAge(30);
// User u1 = new User();
// u1.setAge(10);
// u1.setBirthday(new Date());
// u1.setFirtsName("aaaa");
// u1.setName("adf");
// u1.setSchool("aaaa");
// Field[] fields = u1.getClass().getDeclaredFields();
// u.setSchool("bbbbbbbbb");
// System.out.println("u1---------> " + u1);
// System.out.println("u----------> " + u);
// System.out.println(Copy(u, u1, false));
// } }
两个实体类 复制 copy 工具类的更多相关文章
- Java json工具类,jackson工具类,ObjectMapper工具类
Java json工具类,jackson工具类,ObjectMapper工具类 >>>>>>>>>>>>>>> ...
- Property工具类,Properties文件工具类,PropertiesUtils工具类
Property工具类,Properties文件工具类,PropertiesUtils工具类 >>>>>>>>>>>>>& ...
- Java精选笔记_集合概述(Collection接口、Collections工具类、Arrays工具类)
集合概述 集合有时又称为容器,简单地说,它是一个对象,能将具有相同性质的多个元素汇聚成一个整体.集合被用于存储.获取.操纵和传输聚合的数据. 使用集合的技巧 看到Array就是数组结构,有角标,查询速 ...
- Collections 工具类和 Arrays 工具类常见方法
Collections Collections 工具类常用方法: 排序 查找,替换操作 同步控制(不推荐,需要线程安全的集合类型时请考虑使用 JUC 包下的并发集合) 排序操作 void revers ...
- 【Java】【常用类】 Arrays工具类 源码学习
虽然在数组的随笔中有说过,但实际上应该仔细深入一下源码进行分析 源码没有想象中的高大上,代码终究还是写给人看的,可读性大于执行性 最小阵列排序:1 乘 2的13次方 = 8192 学识浅薄,暂时还不 ...
- LinkedHashSet、Map、Map接口HashMap、Hashtable,TreeSet、TreeMap、如何选择使用集合实现类,Collections工具类
一.Set接口实现类LinkedHashSet 实现继承图: 1.LinkedHashSet的全面说明 1) LinkedHashSet是 HashSet的子类 2) LinkedHashSet底层是 ...
- Java工具类- 跨域工具类
原本Spring MVC项目添加跨域: 在web.xml文件中配置: <!-- cors解决跨域访问问题 --> <filter> <filter-name>cor ...
- 实用的 集合工具类 和 String工具类
集合工具类:CollectionUtil method: 1.isNotEmpty() 不为空 2.isEmpty() 为空 举例:map集合 Map<String,String ...
- Scanner类、匿名对象、Random类、ArrayList集合、String类、static静态类、math类和Arrays工具类
一.Scanner类 1.除了八种基本数据类型,其他都是引用类型: 引用类型使用三步骤: 2.Scanner类 引用jdk提供的类,Scanner在java.util包下,不在java.lang包(S ...
随机推荐
- linux常用关机和重启命令
Linux有如下的关机和重启命令:shutdown, reboot, halt, poweroff,那么它们有什么区别呢? shutdown - 建议使用的命令 shutdown是最常用也是最安全的关 ...
- Tensorflow的gRPC编程(一)
https://blog.csdn.net/langb2014/article/details/69559182 如何用TF Serving部署TensorFlow模型 https://www.jia ...
- SOAP1.1&SOAP1.2
http://www.webxml.com.cn/webservices/ChinaTVprogramWebService.asmx?op=getTVstationString SOAP 1.1 以下 ...
- IIS 报错试图加载格式不正确的程序集解决办法
原因: 64位系统和32系统不匹配导致. 解决办法: 方法一.注册32位IIS(必须卸载64位IIS) 使用命令 X:WindowsMicrosoft.NETFramework64v4.0.30319 ...
- 卷积的三种模式:full、same、valid + 卷积输出size的计算
转自https://blog.csdn.net/u012370185/article/details/95238828 通常用外部api进行卷积的时候,会面临mode选择. 这三种mode的不同点:对 ...
- (“(null)” is of a model that is not supported by this version of Xcode. Please...)
真机测试遇到以下问题: (还以为手机不支持Xcode的版本呢) 解决方法: 发现只要将XCode重启后就可以真机运行了,碰见这个问题的朋友可以试下,我反正是被坑了半小时...
- 分享一款架子鼓游戏【drum】
视频演示: 电脑版和安卓版都有,没有ios版. 适合想练架子鼓,但是还没买架子鼓的朋友.可以先当做游戏来练练节奏感...下载如下: 电脑版下载>> 手机安卓版下载>>
- redis安装及遇到的坑-linux
获取Redis安装包“redis-4.0.8.tar.gz”,上传Linux服务器; 使用root用户解压: tar zxvf redis-4.0.8.tar.gz -C /usr/local/; 进 ...
- 导包、时间模块【TIME、CALENDAR DATETIME】、SYS、OS, OS.PATH模块、项目开放周期&规范
导包 1.不考虑包的情况下直接from...直接导入文件夹下的具体模块 2. if __name__ == '__ma__' # 自执行 if __name__ == '模块名' # ...
- analyticdb(ADB) group by 用法小结
虽说analyticdb(ADB)是支持mysql协议的,但有些具体细节用法是有些区别. 1.group by 字段 mysql group by select id,title,describe w ...