【问题标题】:Find invocations of subclass method查找子类方法的调用
【发布时间】:2014-11-21 21:48:25
【问题描述】:

对于上下文,假设我有这些类:

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
  • Bar#doStuff() 上的“打开调用层次结构”

但他们似乎同时回电Bar.doStuff() Foo.doStuff() Zig.doStuff()。我还有什么需要做的吗,还是我误解了我得到的结果?

【问题讨论】:

    标签: java eclipse search call invocation


    【解决方案1】:

    要查找肯定来自Bar的呼叫,您可以将Bar#doStuff标记为@Deprecated,然后使用过滤器创建一个新的“问题”视图以仅查找这些消息.

    创建新的问题视图:

    1. 打开默认问题视图
    2. 单击三角形并选择New Problems View
    3. 在新视图中,单击三角形并选择Configure Contents
    4. 在左边,只检查Errors/Warnings in Project
    5. 根据需要设置文本contains 过滤器(在Description 标题下)

    注意:这不会找到Bars 存储为Foos 的情况,例如:

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

    【讨论】:

      【解决方案2】:

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

      final Foo foo = new Foo();
      

      这绝对是不是Bar——但这是很多工作却收效甚微。

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

      【讨论】:

      • 好的,这很有意义。不过我已经更新了问题,因为我也得到了Zigs 的匹配项,这绝对不是Bars。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-04
      • 2013-06-04
      • 2013-07-07
      • 2016-02-14
      • 2011-09-04
      • 2019-01-05
      • 2017-11-09
      相关资源
      最近更新 更多