您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Java有什么理由在生成.equals()时更喜欢getClass()而不是instanceof?

Java有什么理由在生成.equals()时更喜欢getClass()而不是instanceof?

如果你使用instanceof,让你equals实现final将保留方法的对称性合同:x.equals(y) == y.equals(x)。如果final看似有限制,请仔细检查你的对象等效性概念,以确保你的首要实现完全维护Object类所建立的契约。

Josh Bloch支持你的方法

我赞成instanceof使用该getClass方法的原因是,当使用该方法时,存在一些限制,即对象只能与相同类,相同运行时类型的其他对象相等。如果你扩展了一个类并为其添加了一些无害的方法,那么检查一下子类的某个对象是否等于超类的一个对象,即使这些对象在所有重要方面都相等,你也会得到他们不平等的令人惊讶的答案。实际上,这违反了对Liskov替换原理的严格解释,并可能导致非常令人惊讶的行为。在Java中,它特别重要,因为大多数集合(HashTable等)基于equals方法。如果将父类的成员放在哈希表中作为键,然后使用子类实例进行查找,则找不到它们,因为它们不相等。

java 2022/1/1 18:19:06 有555人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶