这个是我自己写的方法,非常实用。
这个方法太实用了。
分享给你们
如果当2个对象中有相同的属性,则可以使用改工具方法。省掉set方法 ,如果属性未null也不会报错
/**
* 属性的拷贝转移
* @param news 被改变的属性
* @param worn 被转移数据的对象
* @param <Y> 泛型
* @author 邵嘉喜
*/
public <Y> void CopyProper(Y news,Y worn) throws IllegalAccessException, InstantiationException {
Class<?> newsClass = news.getClass();
Class<?> wornClass = worn.getClass();
// //实例化对象
// Object newsObj = newsClass.newInstance();
// Object wornObj = wornClass.newInstance();
//获取类中所有的属性(被转移数据的对象)
Field[] newsFields = newsClass.getDeclaredFields();
//获取类中所有的属性(被改变的属性)
Field[] wornFields = wornClass.getDeclaredFields();
for(Field newsfield:newsFields){
newsfield.setAccessible(true);
//获取属性名称
String name = newsfield.getName();
//获取属性值
Object pro = newsfield.get(news);
for (Field wornField : wornFields) {
wornField.setAccessible(true);
//获取属性名
Object wornName = wornField.getName();
boolean isFinal = Modifier.isFinal(wornField.getModifiers());
Object o = wornField.get(worn);
if(name.equals(wornName) && !isFinal && o == null && pro != null){
wornField.set(worn,pro);
break;
}
}
}
}
使用方法
TessayInfo info = new TessayInfo();//需要被赋值的对象
try {
ProperUtils.CopyProper(tEssay,info);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
}
本站为非盈利网站,如果您喜欢这篇文章,欢迎支持我们继续运营!
本站主要用于日常笔记的记录和生活日志。本站不保证所有内容信息可靠!(大多数文章属于搬运!)如有版权问题,请联系我立即删除:“abcdsjx@126.com”。
QQ: 1164453243
邮箱: abcdsjx@126.com