java比较两个相同对象的属性是否一致
来源:互联网 发布:西安交通大学软件学院 编辑:程序博客网 时间:2024/04/19 19:26
主类
import java.beans.PropertyDescriptor;import java.lang.reflect.Field;import java.lang.reflect.Method;public class CompareObejct<T> {private CompareStatus status;/** * 之前原始的值 */private T original;/** * 当前的值 */private T current;public CompareStatus getStatus() {return status;}public T getOriginal() {return original;}public void setOriginal(T original) {this.original = original;}public T getCurrent() {return current;}public void setCurrent(T current) {this.current = current;}public void contrastObj(Class<T> cls) {if(this.original==null){this.status=CompareStatus.NEW;return;}if(this.status==CompareStatus.REMOVE){return;} boolean isEqual=true; try { //Class clazz = this.original.getClass(); Field[] fields = cls.getDeclaredFields(); for (Field field : fields) { PropertyDescriptor pd = new PropertyDescriptor(field.getName(), cls); Method getMethod = pd.getReadMethod(); Object o1 = getMethod.invoke(this.original); Object o2 = getMethod.invoke(this.current); String s1 = o1 == null ? "" : o1.toString();//避免空指针异常 String s2 = o2 == null ? "" : o2.toString();//避免空指针异常 //思考下面注释的这一行:会bug的,虽然被try catch了,程序没报错,但是结果不是我们想要的 //if (!o1.toString().equals(o2.toString())) { if (!s1.equals(s2)) { //textList.add("不一样的属性:" + field.getName() + " 属性值:[" + s1 + "," + s2 + "]"); isEqual=false; System.out.println("不一样的属性:" + field.getName() + " 属性值:[" + s1 + "," + s2 + "]"); } } } catch (Exception e) { System.out.println(e.getMessage()); } if(isEqual){ this.status=CompareStatus.NO_CHANGE; }else{ this.status=CompareStatus.CHANGE; } }}枚举
public enum CompareStatus {/** * 标记新数据 */NEW,/** * 标记变更数据 */CHANGE,/** * 标记没有变更 */NO_CHANGE,/** * 标记移除数据 */REMOVE}
测试
public class CompareTest {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubBDCommend obj1 = new BDCommend();obj1.setBzjlbh("1111");obj1.setHjrq(new Date());BDCommend obj2 = new BDCommend();obj2.setBzjlbh("1112");obj2.setHjrq(new Date());CompareObejct compare = new CompareObejct();compare.setCurrent(obj1);compare.setOriginal(obj2);compare.contrastObj(BDCommend.class);System.out.println(compare.getStatus());}}
阅读全文
0 0
- java比较两个相同对象的属性是否一致
- 比较两个对象的属性值是否相同
- Java中比较两个对象是否相同
- Delphi中比较两个对象是否一致及地址是否相同
- Java 比较两个HashMap里的数据是否一致
- java比较两个文件夹下的文件是否一致
- java 对象比较 判断两个对象的某些或某个属性相同 这对象相等。
- java比较两个对象(类)是否相同
- 利用java反射机制比较同一个bean的两个对象的值是否相同
- 利用java反射机制比较同一个bean的两个对象的值是否相同
- java 反射比较两个类型相同的对象 内部的变量是否相等
- C#中比较两个对象的地址是否相同
- 比较一个类的两个对象是否相同
- 比较两个实例对象是否相同的方法
- 比较一个类的两个对象是否相同
- Java比较两个对象是否相同并获得不同的字段
- 两个List比较各自对象的属性相同的问题
- 比较两个类对象是否相同
- 弹幕框架
- java内存问题
- AndroidStudio插件GsonFormat快速实现JavaBean
- AccessibilityService使用情况
- C++之多态
- java比较两个相同对象的属性是否一致
- hrbust 2340 一品五彩
- extJs的layout : 'column'布局出错
- Header And contentType
- 基于MHA的MySQL高可用架构的实现
- SQL基础之数据类型
- python语言特性(思维导图)
- string.intern()那些事
- IntelliJ Idea 常用快捷键