为什么我们要在 Java 中以 Object 作为参数编写 equals 方法?
Why would we write equals method in Java with Object as argument?
我正在学习 Java 的课程,并且经常在新的 classes 中定义 equals
方法时,它的参数是 Object
而不是实际类型的 class。代码示例:
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
检查?
你应该自己做类型检查,只是像你说的那样转换是不安全的,因为它可能是错误的类型,然后它会抛出一个 ClassCastException
.
使用 object 的原因是你可能有不同的 类 这可能是相等的(虽然这种情况很少见),如果你不覆盖 equals 的对象形式那么你将面临问题使用集合,因为事物不会相等,因为集合将使用对象形式。
理论上可能有一个通用的 equals 接口,但 equals 方法早于遗传学,而且能够检查任何对象与任何其他对象简化了大量代码。
我正在学习 Java 的课程,并且经常在新的 classes 中定义 equals
方法时,它的参数是 Object
而不是实际类型的 class。代码示例:
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
检查?
你应该自己做类型检查,只是像你说的那样转换是不安全的,因为它可能是错误的类型,然后它会抛出一个 ClassCastException
.
使用 object 的原因是你可能有不同的 类 这可能是相等的(虽然这种情况很少见),如果你不覆盖 equals 的对象形式那么你将面临问题使用集合,因为事物不会相等,因为集合将使用对象形式。
理论上可能有一个通用的 equals 接口,但 equals 方法早于遗传学,而且能够检查任何对象与任何其他对象简化了大量代码。