比较Java

时间:2017-08-21 18:27:58

标签: java

我有两个对象,每个对象有几十个字段:

Class1 {
    int firstProperty;
    String secondProperty;
    String anotherProperty1;
    ...
}

Class2 {
    int firstProperty;
    String secondProperty;
    String anotherProperty2;
    ...
}

某些方法名称完全相同,其他方法名称不相同,例如此处,它们都有firstPropertysecondProperty,并且名称相同。但其他领域不一样。知道两个类中两个对象的每个相同字段的值是否实际相同的优雅方法是什么?

_________________________________ UPDATE _____________________________________

我仍然不确定为什么有些人仍然认为这完全是重复的问题。由于问题已经结束,我必须在此处粘贴我的解决方案。

private boolean hasChanged(Object o1, Object o2){

    if (o1 == null || o2 == null) {
        return true;
    }

    Class clazz1 = o1.getClass();
    Class clazz2 = o2.getClass();
    for (Method method1 : clazz1.getDeclaredMethods()) {
        for (Method method2 : clazz2.getDeclaredMethods()) {
            try {
                if (method1.getName().startsWith("get") && method1.getName().equals(method2.getName())) {
                    if (method1.invoke(o1, null) == null && method2.invoke(o2, null) == null) {
                        continue;
                    } else if (method1.invoke(o1, null) == null || method2.invoke(o2, null) == null) {
                        continue;
                    } else if (!method1.invoke(o1, null).equals(method2.invoke(o2, null))) {
                        return true;
                    }
                }
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                e.printStackTrace();
            }
        }
    }
    return false;
}

1 个答案:

答案 0 :(得分:0)

我认为最好的方法是创建一个公共抽象类,它们都是通过重写equals继承的。像这样:

public abstract class ParentClass {
    int firstProperty;
    String secondProperty;
    String anotherProperty1;

    @Override
    public boolean equals(ParentClass other)  {
        return this.firstProperty == other.firstProperty &&
            this.secondProperty.equals(other.secondProperty) &&
            this.anotherProperty1.equals(other.anotherProperty1);
    }
} 

然后只需拥有Class1 extends ParentClassClass2 extends ParentClass。然后,如果您有第一类的实例,请说:Class1 a = new Class1();Class2 b = new Class2();您可以a.equals(b)来比较相等。