我目前面临以下问题:
我有一个特定的类,其中 equals() - 方法被覆盖。但是我不确定它是否曾经被使用过(在我或我的一个同事项目中)。有没有办法找出来?当我搜索引用时,它只是给了我对 Object equals() - 方法的所有引用(相当多)。肯定有比扫描所有这些更简单的方法......
有人有想法吗?
您要求 Eclipse 解决一项不可能完成的任务。
要确定是否调用了特定的覆盖方法不是静态可判定的,这就是 Eclipse 过度近似响应的原因。
假设你有一些领域Object o
并且你在某个时候做o.equals(...)
。要确定是否o
可以引用一个YourClass
对象,您需要确定o
每个可能的执行路径的运行时类型,这根本无法静态完成。
不可能的原因与编译器拒绝以下代码的原因非常相似:
Object o = "hello";
System.out.println(o.length());
您可以做的最好的事情可能是通过设置断点或通过从 equals 方法中抛出例如 UnsupportedOperationException 来调试您的程序。
似乎java在这方面被打破了。因此,您需要努力做到这一点,并希望抓住所有事件。
我想不出一种纯粹通过静态分析可靠地做到这一点的方法(我怀疑是否存在)。
一种可能有用的实用方法是在方法的第一行设置断点equals()
,然后在 Eclipse 调试器中启动程序。每当调用该方法时,Eclipse 都会中断调试器。此时,您将能够检查调用堆栈以查看谁调用了该方法。
要有效地做到这一点,您必须了解哪些代码路径可以调用该方法。如果您无法触发该方法,这并不能证明没有人使用它。
在 Eclipse -> Package explorer 或 Outline 视图中选择方法名称,然后单击 F4。或者,您可以选择方法 -> 右键单击 -> 打开调用层次结构
这将显示在您的工作区中调用此方法的所有成员。希望这可以帮助
如何修改覆盖的等于:
log.debug // Whatever you want
return this == obj;
哪个给你经典的 Object equals ?或者如果你扩展了某个类,也许是 super.equals?