zoukankan      html  css  js  c++  java
  • 比较两个JavaBean对象的不同

    比较两个bean的内容

    /**
     * 比较两个Bean的内容
     *
     * @param <T>
     * @author zhw
     */
    public class ContrastObjUtils<T> {
    
    	public String contrastObj(Object oldBean, Object newBean) {
    		String str = "";
    		T pojo1 = (T) oldBean;
    		T pojo2 = (T) newBean;
    		try {
    			Class clazz = pojo1.getClass();
    			Field[] fields = pojo1.getClass().getDeclaredFields();
    			int i = 1;
    			for (Field field : fields) {
    				if ("serialVersionUID".equals(field.getName())) {
    					continue;
    				}
    				PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz);
    				Method getMethod = pd.getReadMethod();
    				Object o1 = getMethod.invoke(pojo1);
    				Object o2 = getMethod.invoke(pojo2);
    				if (o1 == null || o2 == null) {
    					continue;
    				}
    				if (!o1.toString().equals(o2.toString())) {
    					if (i != 1) {
    						str += ";  ";
    					}
    					boolean hasAnnotation = field.isAnnotationPresent((Class<? extends Annotation>) CustomFieldName.class);
    
    					String customFieldValue = "";
    					if (hasAnnotation) {
    						CustomFieldName customFieldName = field.getAnnotation(CustomFieldName.class);
    						customFieldValue = customFieldName.value();
    					}
    					// 要显示的字段名
    					String fieldName = "";
    					if (customFieldValue != "") {
    						fieldName = customFieldValue;
    					} else {
    						fieldName = field.getName();
    					}
    
    					str += i + "、" + fieldName + ",旧值:" + o1 + ",新值:" + o2;
    					i++;
    				}
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    
    		return str;
    	}
  • 相关阅读:
    京东二面面经(07.17 11:30)
    招银三面手撕代码题(字符串连续子串)
    shein二面(31min)
    京东提前批一面
    两个链表的第一个公共结点
    Java并发机制的底层实现原理
    招银网络(二面07.09)
    黑盒测试与白盒测试
    求1+2+...+n(剑指offer-47)
    第一个只出现一次的字符(剑指offer-34)
  • 原文地址:https://www.cnblogs.com/creaky/p/10802950.html
Copyright © 2011-2022 走看看