将source类中的属性值赋给target类中对应的属性
/**
* 对象的属性值拷贝
* <p>
* 将source对象中的属性值赋值到target对象中的属性,属性名一样,类型一样
* <p>
* example:
* <p>
* source:
* <p>
* String name;
* String address;
* Integer age;
* Date birthday;
* <p>
* target:
* String name;
* String address;
* String email
* <p>
* 结果: source name, address -> target name, address
*
* @param source
* @param target
*/
思路:三步走,
第一步:获取source和target的全部属性,放入List集合中(为什么要放入List集合中,为了偷懒而已,大可以不放就是多写一层循环而已);
第二步:比较两个类中属性名是否相等,相等的话,执行第三步,不相等,继续遍历,直到遍历结束;
第三步:判断属性的类型是否相同,相同赋值,不相同继续遍历,直到遍历结束
代码如下:
public static void copy(Object s, Object t) {
//TODO
List<String> list_s = new ArrayList<>();
List<String> list_t = new ArrayList<>();
//获取s的Class对象
Class clss = s.getClass();
//获取t的Class对象
Class clst = t.getClass();
//获取s中所有属性,并加入到集合list_s中
Field[] fields = clss.getDeclaredFields();
for(Field ff : fields){
list_s.add(ff.getName());
}
//获取t中所有属性,并加入到集合list_t中
Field[] fieldt = clst.getDeclaredFields();
for(Field ff : fieldt){
list_t.add(ff.getName());
}
//遍历list_t集合,在list_s集合中查找是否含有t的属性,包含判断属性类型是否相同,相同赋值
for(String ss : list_t){
if(list_s.contains(ss)&&isEqualFieldType(s,t,ss)){
sCopyt(s,t,ss);
}
} }
//判断二者属性类型是否相同
public static boolean isEqualFieldType(Object o1,Object o2,String s){
Class cls1 = o1.getClass();
Class cls2 = o2.getClass();
try {
Field f1 = cls1.getDeclaredField(s);
Field f2 = cls2.getDeclaredField(s);
if(f1.getType().getName().equals(f2.getType().getName())){
return true;
}
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
return false; }
//将s中的属性值赋给t的属性值
public static void sCopyt(Object o1,Object o2,String s){
Class cls1 = o1.getClass();
Class cls2 = o2.getClass();
try {
//获取对应的属性对象
Field f1 = cls1.getDeclaredField(s);
Field f2 = cls2.getDeclaredField(s);
//设置可见性
f1.setAccessible(true);
f2.setAccessible(true);
//利用get和set方法进行赋值
f2.set(o2,f1.get(o1));
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
}
将source类中的属性值赋给target类中对应的属性的更多相关文章
- 阶段3 1.Mybatis_05.使用Mybatis完成CRUD_8 Mybatis中的返回值深入-调整实体类属性解决增和改方法的报错
如果实体类和数据库表内的字段没有保持一致 修改了属性子弹. 重新生成getter和setter还有toString方法 测试类里面,相关set的方法就都会报错. 只需要修改为最新的set方法就可以了. ...
- 用泛型方法Java从实体中提取属性值,以及在泛型方法中的使用
public <T> T getFieldValue(Object target, String fieldName, Class<T> typeName) { try { O ...
- SpringMVC(六):@RequestMapping下使用@RequestHeader绑定请求报头的属性值、@CookieValue绑定请求中的Cookie值
备注:我本地浏览器的报头(Request Header)信息如下: Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image ...
- C# 反射获取属性值、名称、类型以及集合的属性值、类型名称
实体类 class Product { public string Id { get; set; } public string Name { get; set; } public List<P ...
- 阶段3 1.Mybatis_05.使用Mybatis完成CRUD_9 Mybatis中的返回值深入-解决实体类属性和数据库列名不对应的两种方式
sql语句里面起别名的方式 测试查询的方法 数据字段 都有值了. 配置查询接口列表和实体类属性名对应关系 id可以随便起名 主键的对应 再次测试,并没有封装成功 这是应为定义的对应关系并没有使用. 当 ...
- 30.编写一个Shape类,具有属性:周长和面积; 定义其子类三角形和矩形,分别具有求周长的方法。 定义主类E,在其main方法中创建三角形和矩形类的对象, 并赋给Shape类的对象a、b,使用对象a、b来测试其特性。
package zuoye8; public abstract class Shape { private double zhouchang ; private double mianji ; pub ...
- 编写一个Shape类,具有属性:周长和面积; 定义其子类三角形和矩形,分别具有求周长的方法。 定义主类E,在其main方法中创建三角形和矩形类的对象, 并赋给Shape类的对象a、b,使用对象a、b来测试其特性。
package shape; public class Shape { //定义成员变量 private double zhouchang; private double mianji; public ...
- 41-ssm中对象查找正确但是没有将数据库中某个属性值赋给对象的一个成员变量
原因: 变量名虽然与 数据库字段一致,但是 包含下划线,如: a_b,数据库确实也是a_b: 但是ssm开启驼峰命名了,就要将变量名改为 aB , 驼峰命名就可以了.
- python 3.6闭包+循环获取出字典中所有的值并保存在list中
def list_test(): list1=[] def list_all_dict(a): #检测字段类型 if isinstance(a,dict): for x in range(len(a) ...
随机推荐
- 野路子码农系列(2)Python中的类,可能是最通俗的解说
啥叫佩奇?啥叫类?啥叫面向对象?后面两个问题以前在大学里“祖传谭浩强”的时候我经常会有所疑问.老师说着一堆什么public, private,我都是一脸懵逼,啥叫私有?为啥要私有?然后就神游天外了…… ...
- Python——各类库的安装(持续更新)
一.BeautifulSoup 说明:www.crummy.com:Beautiful Soup 3只能在python2.x版本中运行,而Beautiful Soup 4还可以在python3.x版本 ...
- CTR预估中GBDT与LR融合方案(转载)
1.背景 CTR预估,广告点击率(Click-Through Rate Prediction)是互联网计算广告中的关键环节,预估准确性直接影响公司广告收入.CTR预估中用的最多的模型是LR(Logis ...
- Repeater取不到服务端控件
<td> <asp:Button ID="Button1" runat="server" Text="查看" O ...
- 关闭QQ右下角弹窗小程序
关闭QQ右下角弹出的广告或新闻等. 程序没有界面,后台运行. #if defined(UNICODE) && !defined(_UNICODE) #define _UNICODE # ...
- 【题解】魔板—洛谷P1275。
话说好久没更博了. 最近学了好多知识懒的加进来了. 有幸认识一位大佬. 让我有了继续更博的兴趣. 但这是一个旧的题解. 我在某谷上早就发过的. 拿过来直接用就当回归了吧. 其实这道题有一个特别关键的思 ...
- vue.js学习系列-第二篇
一 VUE实例生命周期钩子 1 生命周期函数 定义 生命周期函数就是vue在某一时间点自动执行的函数 2 具体函数 1 new vue() 2 before ...
- 第十五节、OpenCV学习(四)图像平滑与滤波
图像的平滑与滤波 平滑滤波是低频增强的空间域滤波技术,是图像模糊.消除噪声. 一.2D滤波器cv2.filter2D() 对于2D图像可以进行低通或者高通滤波操作,低通滤波(LPF)有利于去噪声,模糊 ...
- [转] 图解Seq2Seq模型、RNN结构、Encoder-Decoder模型 到 Attention
from : https://caicai.science/2018/10/06/attention%E6%80%BB%E8%A7%88/ 一.Seq2Seq 模型 1. 简介 Sequence-to ...
- java学习笔记04-基本数据类型
编写一款可用的软件,离不开对数据的操作(经常有人说:程序=数据+算法).数据可能有很多类型,比如对于年龄来说,数据就是整数. 对于金额来,数据是带小数的.在java中,可以分为内置数据类型和引用数据类 ...