为什么我们要在Java中编写以对象为参数的equals方法?
我正在用Java学习一门课程,当为什么我们要在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(
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,并且能够用任何其他方法检查任何对象简化了许多代码