目前我遇到了以下问题:
我有一个类,其中equals() - 方法被覆盖。但是我不确定它是否被使用过(无论是在我的同事还是在我的同事项目中)。有没有办法找出来? 当我搜索引用时,它只是给了我对Object equals() - Method(很多)的所有引用。肯定有一种比扫描所有这些更简单的方法......
有人有个主意吗?
答案 0 :(得分:5)
你要求Eclipse解决一项不可能完成的任务。
要确定是否调用了特定的重写方法静态可判定,这就是Eclipse过度接近响应的原因。
假设您有一些字段Object o
,并且您在某个时间点o.equals(...)
。要确定o
是否可以引用YourClass
对象,需要在每个可能的执行路径中确定o
的运行时类型,这是静态无法完成的。
它不可能的原因与编译器拒绝以下代码的原因非常相似:
Object o = "hello";
System.out.println(o.length());
你可以做的最好的事情可能是通过设置断点或在equals方法中抛出一个UnsupportedOperationException来调试你的程序。
答案 1 :(得分:2)
似乎java在这方面被打破了。所以你需要以艰难的方式去做,并希望能够捕捉所有事件。
答案 2 :(得分:1)
我想不出一种纯粹通过静态分析可靠地做到这一点的方法(我怀疑是否存在)。
可能帮助的实用方法是在equals()
方法的第一行设置断点,并在Eclipse调试器中启动该程序。每当调用该方法时,Eclipse都会进入调试器。此时,您将能够检查调用堆栈以查看谁调用了该方法。
为了有效地做到这一点,你必须知道可以期望哪些代码路径调用该方法。如果您无法触发该方法,则无法证明没有人使用该方法。
答案 3 :(得分:1)
在Eclipse中选择方法名称 - >打包资源管理器或大纲视图,然后单击F4。
或者,您可以选择方法 - >右键单击 - >打开调用层次结构
这将显示在工作区中调用此方法的所有成员。
希望这有帮助
答案 4 :(得分:1)
如何将重写等于修改为:
log.debug // Whatever you want
return this == obj;
哪个给你经典的Object等于?或者如果你延伸一些课程,也许是一个super.equals?