有没有办法使用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()的调用
- 希望你不要错过什么