【问题标题】:Overriding equals and finding which field was unequal覆盖equals并查找哪个字段不相等
【发布时间】:2014-12-10 20:54:18
【问题描述】:

我重写了一个类的 equals 方法来比较两个对象,因为我想比较它的所有字段。如果两个对象不相等,有没有办法找出由于对象不相等而导致的哪些字段不相等?

【问题讨论】:

  • 如果可能,您希望如何获得通知?你所做的只是调用equals(Object)
  • 所以我想进行两次调用,如果equals返回false,尝试访问不相等的。同时,我不想检查每个字段是否相等。只是想知道是否有现有的功能,否则我将修改方法。
  • 你想知道什么:字段名还是其他什么?
  • 两者,字段名和值

标签: java class object overriding equals


【解决方案1】:

您可以在类中编写一个方法,该方法返回一个相同类型的对象,其中每个数据成员的差异或为空。或者你可以找到一个为你做这件事的图书馆。试试http://javers.org

【讨论】:

  • 已经尝试过 Javers。这是越野车。对我来说不能正常工作。
【解决方案2】:

创建类来存储这样的字段信息(或使用Map):

class FieldsContainer<F,V>{
    private F field;
    private V value;
    public FieldsContainer(F field, V value) {
        this.field = field;
        this.value = value;
    }
    public FieldsContainer(){}
    public F getField() {
        return field;
    }
    public void setField(F field) {
        this.field = field;
    }
    public V getValue() {
        return value;
    }
    public void setValue(V value) {
        this.value = value;
    }

}

然后在equals()中:

public boolean equals(Object obj) {
        ...
        } else if (!field1.equals(other.field1)){
            fieldsContainer=new FieldsContainer("fieldName1", field1);
            return false;
        }
        if (field2 != other.field2){
            fieldsContainer=new FieldsContainer("fieldName2", field2);
            return false;
        }
        fieldsContainer=null;
        return true;
    }

主要是:

if(!obj1.equals(obj2)){
    fieldsContainer.getField();
    fieldsContainer.getValue();
    //Your stuff
}

【讨论】:

    猜你喜欢
    • 2012-09-08
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 2021-09-20
    • 1970-01-01
    • 2014-09-30
    • 1970-01-01
    相关资源
    最近更新 更多