我想覆盖 equals(Object o)
而不使用 instanceof
、getClass()
和转换。这在 Java 中可行吗?如果可以的话,如何实现?
编辑:我也想用这个方法。
例如:我想在 Cow 类中重写此方法,并用它来检查我的 Cow 在逻辑上是否等于其他 Cow?
谢谢大家的解答。我的主要问题是:如果我将 Car 作为其他类发送给我的牛或任何其他对象,会发生什么。如何检查 Object o 是否获得方法 getName()
(假设我的牛获得此方法)?
最佳答案
当然。
使Cow
可序列化,并确保其序列化形式是规范的(最坏的情况是实现Externalized
并手写自己的规范序列化),然后执行等于
中的以下内容:
- 尝试序列化参数。如果失败,则返回 false。
- 序列化
此
。 - 比较两者的序列化字节。
由于串行形式包含标识类型的字符串,因此它包含区分不同类型实例所需的字节。
这并不容易,效率低下,可能是维护噩梦,并且绝对不应该是您的首选,但它确实表明 Java 代码可以使用一些语言技巧,无需 instanceof 即可进行类型区分
或 Class
相同性检查。
但需要注意的是:串行形式不区分不同类加载器中加载的同名类。
关于java - 是否可以在不使用instanceof和getClass的情况下覆盖equals?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13807827/