【发布时间】:2016-09-27 21:08:16
【问题描述】:
我有课说
class Dog {
String name;
int age;
String collarType;
}
我已经重写了 equals 方法来比较所有 3 个字段以确定 2 只狗是否相等。
现在我有 2 个 Dog 对象,即使 2 个 Dog 实例中的 collarType 不同,它们也可以相等。因此,我不能使用我的equals 方法。
使用新架构编写比较器(仅比较姓名和年龄)并检查 compare(Dog d1, Dog d2) 是否返回 0 是最好的方法吗?
【问题讨论】:
-
出于什么目的需要知道它们是否相等?
-
Guava 有一个名为
Equivalence的类,可以用于此目的。 -
对我来说这似乎是倒退的:平等测试应该只使用不变的字段,例如姓名(更改的可能性很小)、出生日期(而不是更容易更改的年龄),而不是 colType可以随心所欲地改变。
-
这取决于您想要比较
Dog实例的上下文。如果您想使用集合或类似方法对它们进行排序,那么实现比较器是可行的方法。如果你只需要一个额外的equals方法,只需将其实现为Dog的实例方法即可。当然,只有原始的equals方法可以使用==,你必须用它的名字来调用你的第二个equals:dog1.equalByNameAndAge(dog2)或类似的。 -
@gmazlami 澄清一下,Java 中的 == 运算符从不“调用” .equals() 方法。 == 比较对象引用或原语。
标签: java equals comparator