概述
废话不多说直接上代码方法,这个方法是传入一个泛型为任意类型T 的集合,然后循环从集合中利用反射获取类型为T的对象的属性然后set给类型为E的对象并返回对象E。亲们可以用我写这个方法进行任意适合你需求的去改造。
/**
*
* @param from
* @param e
* @param <T>
传入的对象
* @param <E>
输出的对象
* @return
把集合为T的 类型通过反射,进行对应的赋值到e的相同属性中去
* @throws IllegalAccessException
* @throws InstantiationException
* @throws ClassNotFoundException
* @throws NoSuchFieldException
*/
public <T, E> E getArrObjByNames(ArrayList<T> from, E e) throws IllegalAccessException, InstantiationException, ClassNotFoundException, NoSuchFieldException {
// 被赋值对象
List<Field> fields = Arrays.asList(e.getClass().getDeclaredFields());
List<String> list = new ArrayList<>();
fields.forEach(field -> list.add(field.getName()));
for (T t : from) {
System.out.println(t);
for (int i = 0; i < t.getClass().getDeclaredFields().length; i++) {
String str = t.getClass().getDeclaredFields()[i].getName();
// 因为FIELDNUM 是静态的 注意getDeclaredField 和 getField 的不同
if (!"FIELDNUM".equals(str) && list.contains(str)) {
Field f = e.getClass().getDeclaredField(str);
//
Field f1 = t.getClass().getDeclaredField(str);
f.setAccessible(true);
f1.setAccessible(true);
f.set(e, f1.get(t));
}
}
}
return e;
}
注意上面Field 这个类中 注意他的get 方法。f.get(obj)中要传入的是Field 所在的obj对象。
最后
以上就是过时帽子为你收集整理的通过反射动态获取类的属性和属性值并把一个类的属性值对应赋值到另外一个类上的全部内容,希望文章能够帮你解决通过反射动态获取类的属性和属性值并把一个类的属性值对应赋值到另外一个类上所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复