仅查找Intelij-Idea中指定类的方法用法

时间:2015-11-30 07:00:12

标签: java intellij-idea

我正在使用Intelijidea,我遇到方法使用发现的问题。

假设我有接口Worker。

public interface Worker {

    void startWork();
    void endWork();
}

我有两个实现。

public class Develper implements Worker {
    @Override
    public void startWork() {
        System.out.println("Developer Start Working");
    }

    @Override
    public void endWork() {

    }
}

public class Qa implements Worker {
    @Override
    public void startWork() {
        System.out.println("QA start Work");
    }

    @Override
    public void endWork() {

    }
}

我打开Developer类并尝试查找startWork的用法。 我只想查看Developer.startWork实现方法的用法。

但是当我找到使用它时,它显示了Developer和Qa startWork方法的用法。 如何在查找Developer.startWork使用时避免使用Qa.startWork方法。

请指教。

3 个答案:

答案 0 :(得分:3)

我正在使用IntelliJ IDEA 15.0.1。

我认为使用“查找用法”功能时所看到的内容取决于上下文。

如果将光标放在方法名Developer.startWork中并调用find usages,则应该会看到一个小对话框。你被问到“你想找到基本方法的用法吗?”

如果您说“No”,并且在您的来源中您只通过基类或接口(在您的示例中为Worker.start())调用该方法,则IDEA不会向您显示任何匹配。多数民众赞成。

如果您通过Developer.startWork()调用覆盖的方法,并在对话框中按“否”,那么您将看到具体实现的用法。

<强>更新 enter image description here

enter image description here

enter image description here

enter image description here

答案 1 :(得分:0)

在阅读@JimHawkins的答案之后,我认为大象还在房间里:)问题是,你想看看Developer#startWork实际被调用的地方,还是你想看看静态引用它的位置?

例如:

dic1 = {'k': 'dic2'}
dic2 = {'key_1': 'value'}

exec('print ' + dic1['k'] + "['key_1']")

find usages方法只能告诉静态引用给定方法的位置,而不能告诉它实际使用的位置(通过polymorphism机制确定运行时)。

答案 2 :(得分:0)

使用 Ctrl + Shift + Alt + F7 应该显示Jim Hawkins回答的提示。

请参阅:https://www.jetbrains.com/help/idea/find-usages-method-options.html

  

当使用此对话框Ctrl + Shift + Alt + F7搜索方法实现的用法时,IntelliJ IDEA将询问您是否要搜索基本方法。使用其他任何“查找用法”操作(例如Alt + F7或Ctrl + Alt + F7),基本方法将自动包含在搜索结果中。