Java用Field实现对象的拷贝,遍历对象字段、取值赋值

    xiaoxiao2021-03-25  118

    话不多说,上代码,小人拙见,不足之处望见谅! public String 方法名(参数) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException, NoSuchFieldException { List list=XXX; Model2 model2; for (Model1 model1: list) { model2= new Model2(); Field[] field1 = model1.getClass().getDeclaredFields(); Field[] field2 = model2.getClass().getDeclaredFields(); //循环遍历获取model1和model2中相同的字段 for (int i = 0; i < field1.length; i++) { for (int j = 0; j < field2.length; j++) { //设置可以获取私有属性 field1[i].setAccessible(true); field2[j].setAccessible(true); if(field1[i].getName().equals(field2[j].getName())) { String name1 = field1[i].getName(); String name2 = field2[j].getName(); //将首字母大写 name1 = name1.replaceFirst(name1.substring(0, 1), name1.substring(0, 1).toUpperCase()); String type = field1[i].getGenericType().toString(); Method m1 = model1.getClass().getMethod(“get” + name1, null); //对不同参数类型进行分别处理 if (type.equals(“class java.lang.String”)) { // 如果type是类类型,则前面包含”class “,后面跟类名 String value1 = (String) m1.invoke(model1); Field field = model2.getClass().getDeclaredField(name2); field.setAccessible(true); field.set(model2, value1); } if (type.equals(“class java.lang.Integer”)) { Integer value1 = (Integer) m1.invoke(model1); Field field = model2.getClass().getDeclaredField(name2); field.setAccessible(true); field.set(model2, value1); } if (type.equals(“class java.lang.Double”)) { Double value1 = (Double) m1.invoke(model1) Field field = model2.getClass().getDeclaredField(name2); field.setAccessible(true); field.set(model2, value1); } if (type.equals(“class java.util.Date”)) { Date value1 = (Date) m1.invoke(model1); Field field = model2.getClass().getDeclaredField(name2); field.setAccessible(true); field.set(model2, value1); } } } } } } 一定要抛异常。 同类实现方法可以用BeanUtils.copyProperties(newObject,oldObject),实现对象的拷贝(后付前)。

    转载请注明原文地址: https://ju.6miu.com/read-9316.html

    最新回复(0)