查找子类方法的调用

时间:2014-11-21 21:48:26

标签: java eclipse search call invocation

对于上下文,请说我有这些类:

public class Foo {
     public void doStuff() {}
}

public class Bar extends Foo {
     @Override
     public void doStuff() {}
}

public class Zig extends Foo {
     @Override
     public void doStuff() {}
}

我正在尝试查找Bar#doStuff()的调用。

我试过了:

  • Java搜索Bar.doStuff
  • “{1}}
  • 上的”打开调用层次结构“

但它们似乎会返回对Bar#doStuff() Bar.doStuff() Foo.doStuff()的调用。还有其他我需要做的事情,还是我误解了我得到的结果?

2 个答案:

答案 0 :(得分:1)

好吧,由于多态性,IDE没有一种好方法可以知道给定的Foo 不是可能是一个Bar - 所以它会显示对{{1}的所有调用}。我想它可以做更多的分析来确定doStuff的具体类型确实是Foo - 例如,在这种情况下:

Foo

肯定不是一个final Foo foo = new Foo(); - 但这是一项很少有益的工作。

您会注意到接口及其实现也是如此,至少在Eclipse中是这样。

答案 1 :(得分:1)

要从Bar中找到肯定的来电,您可以将Bar#doStuff标记为@Deprecated,然后创建一个新的“问题”视图过滤以找到这些消息。

创建新的Problems视图:

  1. 打开默认问题视图
  2. 点击三角形,然后选择New Problems View
  3. 在新视图中,点击三角形并选择Configure Contents
  4. 在左侧,仅选中Errors/Warnings in Project
  5. 根据需要设置文字contains过滤器(在Description标题下)
  6. 注意:这不会找到将Bar存储为Foo的情况,例如:

    Foo f = new Bar();
    f.doStuff();