【问题标题】:Java Comparing two properties by object referencesJava通过对象引用比较两个属性
【发布时间】:2012-01-12 07:33:32
【问题描述】:

当覆盖我的一个类的 equals 属性时,是否可以这样实现它?有问题的属性(例如标识符)可以是 String、boolean、Date、Set 或 LinkedHashSet

public boolean equals(Object obj)
{
    if (this == obj)
        return true;
    if (obj == null)
        return false;
    if (getClass() != obj.getClass())
        return false;

    if (!compareProperty(identifier, other.getIdentifier())) return false;
    //Continue for all properties
}

//Compares any two objects
private boolean compareProperty(Object sourceObject, Object testObject)
{
    if (sourceObject == null)
    {
        if (testObject != null)
            return false;
    }
    else if(!sourceObject.equals(testObject))
    {
        return false;
    }

    return true;
}

为什么或为什么不?

【问题讨论】:

  • 对不起,我没有正确理解你,但压倒一切等于????你不能覆盖 String 类的 equals() 方法,它是一个最终类。你不能修改它的行为。
  • 抱歉,如果我不清楚,建议您覆盖对象的默认 .equals 方法以正确比较对象的实例。

标签: java object upcasting


【解决方案1】:

这确实是应该做的。

不过,我不会重新发明轮子。考虑使用 Objects.equals(在 Java 7 中)、Objects.equal(在 Guava 中)或 EqualsBuilder(在 apache commons-lang 中)。

【讨论】:

  • EqualsBuilder.reflectionEquals(obj1, obj2) 是唯一一个可以为您省去指定自定义类所有属性的麻烦的方法。其他人只检查空值并使用正常的 Equal 方法。但是反射一如既往地可以触发安全检查警报并且性能很慢。我会像你一样坚持经典的方法
猜你喜欢
  • 2023-03-31
  • 2013-10-23
  • 1970-01-01
  • 2014-09-23
  • 2016-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多