我正在学习Java,并且在使用转换/多态概念方面遇到了一些麻烦。
如果我有以下方法:
public boolean equals(Object x);
其中x可以引用Y类对象;
查看x是否等于y(引用Y类obj的变量)的最佳方法是什么?我理解向下倾斜(Y)x不好?
答案 0 :(得分:3)
向下倾斜是Object.equals
中的常态。在向下转发之前,请检查x
确实是x instanceof Y
的合规对象;为了确保equals
的对称性,有时需要支票x.getClass() == this.getClass()
。
如果x
不是您班级的实例,则会立即返回false
。
答案 1 :(得分:1)
如果您首先执行以下检查,那么向下倾斜也不错:
x != null
getClass().equals(x.getClass())
然后,您可以将x
作为this
的等级,并进行特定的比较。
在null
检查之前,您可能还想比较this
和x
的引用。
如果引用相同,则不需要执行任何其他比较。
答案 2 :(得分:0)
这在很大程度上取决于你对平等的解释。这就是为什么可以覆盖equals运算符的原因。
只需执行x.equals(y)
并通过覆盖equals方法来解释相等性。
一种模板方法是:
public boolean equals(Object x) {
if (this == x)
return true;
if (x == null || this.getClass() != x.getClass())
return false;
// Compare attributes as needed here
}
当然,如果有可能x != null
,您应该先检查null
。