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

时间:2012-05-15 14:15:27

标签: java eclipse class equals

目前我遇到了以下问题:

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

有人有个主意吗?

5 个答案:

答案 0 :(得分:5)

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

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

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

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

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

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

我想不出一种纯粹通过静态分析可靠地做到这一点的方法(我怀疑是否存在)。

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

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

答案 3 :(得分:1)

在Eclipse中选择方法名称 - >打包资源管理器或大纲视图,然后单击F4。 或者,您可以选择方法 - >右键单击 - >打开调用层次结构
这将显示在工作区中调用此方法的所有成员。 希望这有帮助

答案 4 :(得分:1)

如何将重写等于修改为:

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

哪个给你经典的Object等于?或者如果你延伸一些课程,也许是一个super.equals?