我有以下代码,并且在 ContainerBean
的重写 equals()
和 hashCode()
方法上放置了断点。当我在 Debug模式下运行下面的应用程序时,调试器仅针对 System.out.println
行在 hashCode()
处停止,而不是在尝试从 List< 中删除元素时停止
。
import java.util.ArrayList;
import java.util.List;
public class ListRemovalDriver {
public static void main(String[] args) {
List<ContainerBean> remitClaims = new ArrayList<>();
ContainedBean addedRemit1 = new ContainedBean();
addedRemit1.setRemitId(12345L);
ContainerBean added1 = new ContainerBean();
added1.setRemitBean(addedRemit1);
remitClaims.add(added1);
ContainedBean removedRemit1 = new ContainedBean ();
removedRemit1.setRemitId(12345L);
ContainerBean removed1 = new ContainerBean ();
removed1.setRemitBean(removedRemit1);
System.out.println("List before valid removal" + remitClaims);
remitClaims.remove(removed1);
System.out.println("List after valid removal" + remitClaims);
}
}
我错过了什么吗?
从列表中删除元素时,不会调用 ContainerBean
中重写的 equals()
吗?
编辑
我忘了提及 hashCode()
和 equals()
正在按预期工作,即按照 equals()
逻辑删除元素但它唯一的调试器不会带我去列表删除函数调用。
最佳答案
由于您没有给出代码,我不得不猜测:您没有重写 equals,而是添加了如下重载:
public boolean equals(ContainerBean c) { ... }
这将不起作用,因为调用了 equals(Object)。
更改您的 equals 实现以采用 Object 类型的参数,它将在 eclipse 调试器中被调用并停止。
关于java - 在 Eclipse 中调试 equals() 和 hashCode(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40798602/