是否可以在不使用instanceof和getClass的情况下覆盖equals?

时间:2012-12-10 19:32:38

标签: java override equals

我想在不使用equals(Object o)instanceof和投射的情况下覆盖getClass()。这在Java中是可行的,如果可以,它是如何可行的? 编辑:我也想使用这种方法。 例如:我想在类Cow中覆盖此方法并使用它来检查我的Cow在逻辑上是否等于其他Cow?

感谢大家的回答。我的主要问题是:如果我将Car作为其他类发送给我的母牛或任何其他对象会发生什么。如何检查对象是否有方法getName()(假设我的牛得到了这个方法)?

2 个答案:

答案 0 :(得分:2)

不确定

使Cow可序列化,并确保其序列化形式是规范的(最差情况是通过实现Externalizable并手写自己的规范序列化)然后在{{1中执行以下操作}}:

  1. 尝试序列化参数。如果失败,则返回false。
  2. 序列化equals
  3. 比较两者的序列化字节。
  4. 由于序列形式包含一个标识类型的字符串,因此它包含区分不同类型实例所需的字节。

    这不容易,效率低下,可能是一个维护噩梦,绝对不应该是你的第一选择,但它确实证明了Java代码可以使用的语言技巧,可以在没有{{1}的情况下进行类型区分}或this同一性检查。

    但有一点需要注意:串行表单不区分在不同类加载器中加载的具有相同名称的类。

答案 1 :(得分:1)

如果相等标准仅限于使用只能从对象获得的信息,那肯定是可能的。

这/似乎/不太可能......如果您只使用equals方法,为什么要覆盖Object?但是,如果这适合您的设计,那么没有什么可以阻止您这样做。

请确保维护Javadocs for equals()

中定义的合同