为什么我们要在Java中编写以对象为参数的equals方法?

为什么我们要在Java中编写以对象为参数的equals方法?,java,equals,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(

我正在用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);
    }
}
为什么这是一个好的做法?也许如果我以后想使用多态性,这会很有帮助。使用
对象
作为参数是否是一种好的做法,即使我目前认为我不需要多态性,但我仍然应该解释它以防万一


另一个困扰我的问题是,我们从未检查对象是否实际为
TestClass
类型。为什么我们要有一个
实例进行
检查?

你应该自己做类型检查,就像你说的那样,强制转换是不安全的,因为它可能是错误的类型,然后它会抛出一个
ClassCastException

使用object的原因是,您可能有不同的类可以相等(尽管这很少见),如果您不重写equals的对象形式,那么您在使用集合时将面临问题,因为事情不应该是相等的,因为集合将使用object形式

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