我想在名为MyObject的类中覆盖“publicboolean equals(Objectobj)”函数,用于name和age,MyObject的结构如下所示
public class MyObject{
private String name;
private int age;
}
我怎么能?
@balusC:
这个呢?
vo = new MyObject() {
public boolean equals(Object obj) {
return ((MyObject)obj).name().equals(this.getName());
}
vo = new MyObject() {
public boolean equals(Object obj) {
return ((MyObject)obj).age() == (this.getAge());
6条答案
按热度按时间sycxhyv71#
equals()的一般预期是,它为
null
和其他类的对象返回false
,并对相关类的字段执行值相等。当然,您可以通过以下方式处理
String
和Integer
:这打破了
equals
的约定,所以你不能这样做(除非事情以非常奇怪的方式出错)。equals
是一个equivalence relation,所以它必须是自反的,对称的和可传递的。这里的对称部分是关键,因为如果a.equals(b)
,那么b.equals(a)
。String
和Integer
都不会为你做这些。如果你只需要帮助函数来检查名字或年龄是否等于给定的名字/年龄,那么你可以不使用
equals()
来完成:mv1qrgav2#
保持简短和简单(又名KISS原则):写setters和getters。类似下面的例子:
然后在方法中,你需要做检查,你可以写:
zzoitvuj3#
不知道你说的“多个equals()”是什么意思。如果你想比较两个字段,你只需要像这样覆盖equals方法,
每当更改equals时更改hashCode是一个很好的做法,这样HashMap就可以有效地与对象一起工作。
rta7y2nd4#
如果您确实想覆盖equals,它应该看起来像这样:
您需要覆盖 both hashCode()和equals()或两者都不覆盖. And you also should make sure your class is
final
, otherwise there are potential pitfalls with equals。s71maibg5#
goqiplq26#
你的问题有点模糊,但如果唯一的目的是根据你想使用的属性有不同的排序算法,那么就使用
Comparator
。您可以按如下方式使用:
至于实际的
equals()
实现,当两个Person
对象在技术上或本质上相同时,我宁愿让它返回true。您可以使用DB生成的PK来比较技术身份:或者只是比较每一个属性来比较自然身份:
在覆盖
equals()
时,不要忘记覆盖hashCode()
。另请参见:
equals()
andhashCode()