5
回答
java两个对象属性合并问题
终于搞明白,存储TCO原来是这样算的>>>   
有两个对象a和b(同个类),属性又三个分别是 id,name,age。a属性为(1,"小明",null),b的属性为(1,null,18)。我想得到一个对象c属性为(1,"小明",18)有什么好的方法?
举报
tqyin
发帖于4年前 5回/5K+阅
共有5个答案 最后回答: 4年前

简单写了一个  大概差不多样子 把第二个对象的属性复制到第一个对象上   

static void copy(Object o1, Object o2) throws Exception {
		Field[] field = o1.getClass().getDeclaredFields();
		Method[] mm = o1.getClass().getDeclaredMethods();
		for(int j=0 ; j<field.length ; j++){
            String name = field[j].getName();    
            String type = field[j].getGenericType().toString();    
            if(type.equals("class java.lang.String")){   
                Method m = o1.getClass().getMethod("get"+toUpperCaseFirstOne(name));
                String value = (String) m.invoke(o1);
                String value2 = (String) m.invoke(o2);
                if(value == null && value2!=null){
                    m = o1.getClass().getMethod("set"+toUpperCaseFirstOne(name), String.class);
                    m.invoke(o1, value2);
                }
            } else if("int".equals(type)) {
            	Method m = o1.getClass().getMethod("get"+toUpperCaseFirstOne(name));
                Integer value = (Integer) m.invoke(o1);    
                Integer value2 = (Integer) m.invoke(o2);   
                if(value == null){
                    m = o1.getClass().getMethod("set"+toUpperCaseFirstOne(name), Integer.class);
                    m.invoke(o1, value2);
                }
            }
		}
	}



用Java反射 遍历一下所有的属性 得到属性值 判断一下是否为空 如果是空就在第二个属性上取值动态set过来就可以了   

Field[] field = o1.getClass().getDeclaredFields();

引用来自“a_alter”的答案

org.apache.commons.beanutils

public static void copyProperties(Object dest, Object orig)

我一般都是怎么做。哈哈。没问题

引用来自“蘑菇喵”的答案

简单写了一个  大概差不多样子 把第二个对象的属性复制到第一个对象上   

static void copy(Object o1, Object o2) throws Exception {
		Field[] field = o1.getClass().getDeclaredFields();
		Method[] mm = o1.getClass().getDeclaredMethods();
		for(int j=0 ; j<field.length ; j++){
            String name = field[j].getName();    
            String type = field[j].getGenericType().toString();    
            if(type.equals("class java.lang.String")){   
                Method m = o1.getClass().getMethod("get"+toUpperCaseFirstOne(name));
                String value = (String) m.invoke(o1);
                String value2 = (String) m.invoke(o2);
                if(value == null && value2!=null){
                    m = o1.getClass().getMethod("set"+toUpperCaseFirstOne(name), String.class);
                    m.invoke(o1, value2);
                }
            } else if("int".equals(type)) {
            	Method m = o1.getClass().getMethod("get"+toUpperCaseFirstOne(name));
                Integer value = (Integer) m.invoke(o1);    
                Integer value2 = (Integer) m.invoke(o2);   
                if(value == null){
                    m = o1.getClass().getMethod("set"+toUpperCaseFirstOne(name), Integer.class);
                    m.invoke(o1, value2);
                }
            }
		}
	}



按照你说的真的成功了
顶部