我想在不使用equals(Object o)
,instanceof
和投射的情况下覆盖getClass()
。这在Java中是可行的,如果可以,它是如何可行的?
编辑:我也想使用这种方法。
例如:我想在类Cow中覆盖此方法并使用它来检查我的Cow在逻辑上是否等于其他Cow?
感谢大家的回答。我的主要问题是:如果我将Car作为其他类发送给我的母牛或任何其他对象会发生什么。如何检查对象是否有方法getName()
(假设我的牛得到了这个方法)?
答案 0 :(得分:2)
不确定
使Cow
可序列化,并确保其序列化形式是规范的(最差情况是通过实现Externalizable
并手写自己的规范序列化)然后在{{1中执行以下操作}}:
equals
。由于序列形式包含一个标识类型的字符串,因此它包含区分不同类型实例所需的字节。
这不容易,效率低下,可能是一个维护噩梦,绝对不应该是你的第一选择,但它确实证明了Java代码可以使用的语言技巧,可以在没有{{1}的情况下进行类型区分}或this
同一性检查。
但有一点需要注意:串行表单不区分在不同类加载器中加载的具有相同名称的类。
答案 1 :(得分:1)
如果相等标准仅限于使用只能从对象获得的信息,那肯定是可能的。
这/似乎/不太可能......如果您只使用equals
方法,为什么要覆盖Object
?但是,如果这适合您的设计,那么没有什么可以阻止您这样做。