2014-11-21 66 views
0

爲背景的調用,說我有這些類:查找子方法

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()。還有什麼我需要做的,還是我誤解了我得到的結果?

回答

1

好吧,由於多態性,IDE沒有一個好的方法來知道給定的Foo 不是可能是一個Bar - 所以它會告訴你所有的調用doStuff。我想它可以做更多的分析,以確定具體的類型Foo真的是一個Foo - 例如,在案件:

final Foo foo = new Foo(); 

它肯定是不一個Bar - 但是這是一個很大沒有什麼好處。

您會注意到接口及其實現方式也是如此,至少在Eclipse中是如此。

+0

好了,這多有意義。我已經更新了問題,因爲我也得到了'Zig's的匹配,這絕對不是'Bar's。 – 2014-11-21 21:55:52

1

以找到那些絕對Bar,你可以標記爲Bar#doStuff@Deprecated,然後創建一個過濾器一個新的「問題」視圖中找到剛纔這些消息的電話。

創造了新的問題查看:

  1. 打開默認的問題查看
  2. 點擊三角形,然後New Problems View
  3. 在新視圖
  4. ,單擊三角形,然後Configure Contents
  5. 在左邊,只檢查Errors/Warnings in Project
  6. 設置文本contains篩選器(根據Description標題)視情況而定

注意:這將找不到在哪裏Bar s的存儲Foo小號的情況下,例如:

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