gpt4 book ai didi

java - Java equals 方法的错误实现模式

转载 作者:行者123 更新时间:2023-11-30 04:03:25 26 4
gpt4 key购买 nike

我见过很多 java equals() 方法的实现,它们都遵循以下几行:

public boolean equals(Object other){
if (this == other)
return true;

//this if code
if (!(other intanceof MyClass))
return false;
//ends here

otherMyClass = (MyClass)other;
//check all the attribute of this and otherMyClass and return true or false
//accordingly
}

if 中的代码是否有问题,因为它会为 o1.equals(o2) 返回 true(使用 MyClass 的 o1 对象和 MyClass 子类的 o2 对象)?在大多数情况下,这不是预期的行为。

不会 other.getClass() != this.getClass()是一个更好的比较,而不是上面的粗体 if 吗?

最佳答案

o.getClass() != getClass()) 违反了里氏替换原则。

引用一位伟人的话:

The Liskov substitution principle says that any important property of a type should also hold for its subtypes, so that any method written for the type should work equally well on its subtypes.

《Effective Java》一书有关于此主题的更多详细信息。

关于java - Java equals 方法的错误实现模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21408569/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com