我有一个缓存实现,为此我实现了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);
}