zoukankan      html  css  js  c++  java
  • bean反射比较两个bean属性值的修改明细

    1.期望:将【username】从'111'改成'222';将【address】从'这是一个测试数据'改成'这是一个真实数据';

    2.导入jar

         <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-web</artifactId>
          <version>1.5.21.RELEASE</version>
        </dependency>
        
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.8.1</version>
        </dependency>

    3.model类

    public class UserModel {
        private String username;
        private String sex;
        private String age;
        private String address;
        
        
        @Override
        public String toString() {
            return "UserModel [username=" + username + ", sex=" + sex + ", age="
                    + age + ", address=" + address + "]";
        }
        public String getUsername() {
            return username;
        }
        public void setUsername(String username) {
            this.username = username;
        }
        public String getSex() {
            return sex;
        }
        public void setSex(String sex) {
            this.sex = sex;
        }
        public String getAge() {
            return age;
        }
        public void setAge(String age) {
            this.age = age;
        }
        public String getAddress() {
            return address;
        }
        public void setAddress(String address) {
            this.address = address;
        }
        
    }

    4.对比类及测试方法

    public class MyBeanCompareTest {
    
         public static void main(String[] args) throws Exception {
             UserModel oldData = new UserModel();
                oldData.setUsername("111");
                oldData.setAddress("这是一个测试数据");
    
    
                UserModel newData = new UserModel();
                newData.setUsername("222");
                newData.setAddress("这是一个真实数据");
    
    
                String desc = compare(oldData, newData);
                System.out.println(desc);
        }
    
        private static String compare(UserModel oldData, UserModel newData) throws Exception {
            StringBuffer content = new StringBuffer();
            
            Class clazz = newData.getClass();
            Field[] fields = clazz.getDeclaredFields();
            for (Field field : fields) {
                // with modifiers "private"
                ReflectionUtils.makeAccessible(field);
                Object newValue = field.get(newData);
                System.out.print("fieldName="+field.getName()+",fieldValue="+String.valueOf(newValue));
                    Object oldValue = field.get(oldData);
                    System.out.println("	fieldName="+field.getName()+",fieldValue="+String.valueOf(oldValue));
                    
                    if(newValue != null && newValue != oldValue){
                        
                        content.append("将【");
                       content.append(field.getName());
                       content.append("】");
                       content.append("从'");
                       content.append(String.valueOf(newValue));
                       content.append("'改成'");
                       content.append(String.valueOf(oldValue));
                       content.append("';");
                   
                    }
            }
            
             
            return content.toString();
        }
         
    }
  • 相关阅读:
    120. Triangle
    Effective C++ 条款36 绝不重新定义继承而来的non-virtual函数
    Effective C++ 条款31 将文件中间的编译依存关系降至最低
    Effective C++ 条款35 考虑virtual函数以外的其他选择
    Effective C++ 条款34 区分接口继承和实现继承
    Effective C++ 条款33 避免遮掩继承而来的名称
    Effective C++ 条款32 确定你的public继承塑模出is-a关系
    Effective C++ 条款30 透彻了解inlining的里里外外
    Effective C++ 条款29 为"异常安全"而努力是值得的
    Effective C++ 条款28 避免返回handles指向对象内部成分
  • 原文地址:https://www.cnblogs.com/oktokeep/p/13252324.html
Copyright © 2011-2022 走看看