有没有办法使用Eclipse列出某个类的equals()的所有调用?

我目前面临以下问题:

我有一个类,其中equals() – 方法被覆盖。 但是我不确定它是否曾被使用过(无论是在我的同事还是在我的同事项目中)。 有办法找出来吗? 当我搜索引用时,它只是给了我对Object equals() – Method(很多)的所有引用。 肯定必须有一种比扫描所有这些更简单的方法……

有人有个主意吗?

您要求Eclipse解决一项不可能完成的任务。

要确定是否调用了特定的重写方法,并不是静态可判定的 ,这就是Eclipse过度逼近响应的原因。

假设您有一些字段Object o ,并且您在某些时候执行o.equals(...) 。 要确定o是否可以引用YourClass对象,需要确定沿每个可能的执行路径的o的运行时类型,这不能静态完成。

它不可能的原因与编译器拒绝以下代码的原因非常相似:

 Object o = "hello"; System.out.println(o.length()); 

您可以做的最好的事情可能是通过设置断点或在equals方法中抛出例如UnsupportedOperationException来调试程序。

在Eclipse – > Package explorer或Outline视图中选择方法名称,然后单击F4。 或者,您可以选择方法 – >右键单击 – >打开调用层次结构
这将显示在工作区中调用此方法的所有成员。 希望这可以帮助

我无法想象一种纯粹通过静态分析可靠地完成这项工作的方法(我怀疑存在一种方法)。

一个可能有用的实用方法是在equals()方法的第一行设置断点,并在Eclipse调试器中启动该程序。 每当调用该方法时,Eclipse都会进入调试器。 此时,您将能够检查调用堆栈以查看谁调用了该方法。

为了有效地做到这一点,你必须知道可以期望哪些代码路径调用该方法。 如果您无法触发该方法,则不能certificate没有人使用它。

如何修改被覆盖的等于:

 log.debug // Whatever you want return this == obj; 

哪个给你经典的Object等于? 或者如果你扩展一些课程,也许是超级平等?

在这方面似乎破坏了java。 所以你需要以艰难的方式去做,并希望能够抓住所有事件。

  • 创建class级的副本
  • 删除旧class级
  • 通过逐个重命名来修复所有编译器错误。
  • 查找将类用作映射键的事件
  • 查找类的集合(indexOf(),contains())
  • 查找对类的equals()或hashCode()的调用
  • 希望你不要错过什么