编辑
我做得很糟糕,并且为任何人提供了不完整的信息来确定我的问题的原因。真正的问题是我在 Animal 中有一个嵌套类,它有自己的 .equals ,它在其外部类型上调用 .equals 。(因此,从嵌套类的 .equals 中调用 .equals on animal 调用 .equals on animal)。
我在继承树中有三个类。假设它们是Animal
--> Dog<Owner>
--> DogWithHumanOwner
。
所以 DogWithHumanOwner 是通用 Dog 的一个实现,它的所有者专门有一个 Human。
我已经覆盖了 Animal 和 Dog 的 .equal 方法。Dog 的 .equal 方法如下所示:
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (!super.equals(obj))
return false;
[other stuff]
return true;
}
我实际使用的是 DogWithHumanOwner。似乎当我尝试比较两个 DogWithHumanOwner 的相等性时,dogWithHumanOwner 继承了 equals 方法Dog<Owner>
,该方法调用 super.equals,这是 dogWithHumanOwner 的超类的 .equals 方法,这是它所在的方法,因此它会导致递归循环和stackoverflow。
(我不需要比较Dog<Owner>
类实现的任何特定属性,因为我这样做Dog<Owner>
并且所有者需要有适当的 equals 方法。)
编写避免此问题的 .equals 方法的最佳实践是什么?我在画一个空白。我应该只手动测试相等性而不调用 super 吗?
编辑:我不得不删除 BlackLabs,因为我为什么要使用 blackLabs 这样做是没有意义的。