我在 Finding
类中编写了以下 equals 函数:
@Override
public boolean equals(Object o) {
if (!(o instanceof Integer)) {
return super.equals(o);
}
return (o.equals(permanentID) || o.equals(tempID));
}
tempID 和 permanentID 都是整数。现在,当我调用 finding.equals(5) 时,我在检查中收到警告:
'equals()' between objects of inconvertible types 'Integer' and 'Finding' at line 55
我可以为语句、成员或类选择抑制它。但我实际上想在任何对此 equals 函数的调用中抑制它。有什么办法吗?
最佳答案
警告是您的 equals 方法不正确这一事实的副作用。根据 Object
上的 equals
约定(您要覆盖的方法),Integer
不可能等于您的 Finding
对象。
这些是 equals 方法的规则:
- 它是自反的:对于任何非空引用值x,x.equals(x) 应该返回 true。
- 它是对称的:对于任何非空引用 值 x 和 y,x.equals(y) 应该返回 true 当且仅当 y.equals(x) 返回真。
- 它是可传递的:对于任何非空 引用值 x、y 和 z,如果 x.equals(y) 返回 true 并且 y.equals(z) 返回 true,那么 x.equals(z) 应该返回 true 4.一致:对于任意非空引用值x和y,多个 x.equals(y) 的调用始终返回 true 或始终如一 返回 false,前提是在 equals 比较中没有使用信息 对象被修改
- 对于任何非空引用值 x,x.equals(null) 应该返回 false。
你最好创建一个新方法来进行上面的比较,如果你让你的 equals
方法保持原样,你可能会得到一些奇怪的结果。
关于java - Android Studio 隐藏不正确的 "Probable bug",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33031819/