我正在学习Java课程,并且在新类中定义equals
方法时,它的参数是Object
,而不是类的实际类型。代码示例:
public class TestClass {
String label, value;
public TestClass(String label, String value) {
this.label = label;
this.value = value;
}
public boolean equals(Object o) {
TestClass t = (TestClass) o;
return this.value.equalsIgnoreCase(t.value);
}
}
为什么这是一个好习惯?也许如果我想稍后使用多态,这将有所帮助。使用Object
作为参数是一个好习惯,即使我现在不认为我需要多态,但为了以防万一我还应该考虑它?
令我烦恼的是,我们永远不会检查对象是否实际上是TestClass
类型。我们为什么要进行instanceof
检查?
答案 0 :(得分:1)
你应该自己进行类型检查,只是像你说的那样投射是不安全的,因为它可能是错误的类型,然后它会抛出ClassCastException
。
使用对象的原因是你可能有不同的类可能是相同的(虽然这很少见),如果你不覆盖equals的对象形式,那么当你使用集合时你会遇到问题不应该是,因为集合将使用对象形式。
理论上可以有一个通用的equals接口,但是equals方法早于遗传学,并且能够用任何其他对象检查任何对象简化了很多代码。