我有一个缓存实现,为此我实现了KeyObject

所以缓存是HashMap<KeyObject , List<SomeObjects>>

这个KeyObject类,假设它有2个变量a,b;

class KeyObject {
    MyObject a;
    AnotherMyObject b;

    KeyObject(MyObject a, AnotherMyObject b){
          this.a = prop1 ; this.b= prop2;
    }
}


可以,我根据MyObject和AnotherMyObject的属性实现了equals方法。

像这样说

public boolean equals(Object keyObject){
    if(keyObject.isSomeType() && this.a.isSomeType(){
       return keyObject.a.equals(this.a)
    }
    else{
        return keyObject.a.equals(this.a) && keyObject.b.equals(this.b)
    }
}


平等实践是否像上述惯例一样?

谢谢

最佳答案

三件事:


检查您要比较的对象是否为空。
使用instanceof确保另一个对象的类型正确。
在测试相等性之前,将另一个Object强制转换为KeyObject


所以像这样:

// Override annotation gives you bonus points :)
@Override
public boolean equals(Object other) {
    if (other == null)
        return false;

    if (!(other instanceof KeyObject))
        return false;

    KeyObject keyObject = (KeyObject) other;

    // I'm not exactly sure what this line is doing
    // but I assume it's part of your program.
    if(keyObject.isSomeType() && this.a.isSomeType()
        return keyObject.a.equals(this.a);
    else
        return keyObject.a.equals(this.a) && keyObject.b.equals(this.b);
}

10-06 07:19