为什么我们在Java中使用Object作为参数编写equals方法?

时间:2017-09-08 12:57:08

标签: java equals

我正在学习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检查?

1 个答案:

答案 0 :(得分:1)

你应该自己进行类型检查,只是像你说的那样投射是不安全的,因为它可能是错误的类型,然后它会抛出ClassCastException

使用对象的原因是你可能有不同的类可能是相同的(虽然这很少见),如果你不覆盖equals的对象形式,那么当你使用集合时你会遇到问题不应该是,因为集合将使用对象形式。

理论上可以有一个通用的equals接口,但是equals方法早于遗传学,并且能够用任何其他对象检查任何对象简化了很多代码。