首页 > 解决方案 > 如何找到接口方法的 ONE 实现的用法

问题描述

我有一个包含数百个接口实现的项目。我想在该接口的一个实现中找到方法的用法。Intellij(和 Eclipse)都向我展示了该方法在所有实现中的所有用法——数百种。

我在界面的一个实现中突出显示该方法,右键单击并选择“查找用法”,它向我显示了该方法在所有实现中的所有用法。

Intellij 中的所有使用选项似乎都没有让我得到一个实现。

public interface Dog {
    void bark(int volume);
}
public class Lab implements Dog {
    public void bark(int volume) {
        System.out.println("woof");
    }
}
public class Collie implements Dog {
    public void bark(int volume) {
        System.out.println("woof");
    }
}
public class Main {

    public static void main(String[] args) {
        Dog onyx = new Lab();
        Dog lassie = new Collie();


        onyx.bark(50);
        lassie.bark(20);
    }
}

如果我突出显示 Lab bark 方法,单击 show usages,我只想查看 main.java 中的 onyx.bark(50) 行,而不是 main.java 中的两个 bark 用法。

我意识到,如果我在主类中使用 Lab onyx = new Lab() 和 Collie lassie = new Collie(),查找引用将起作用,但这不是项目的编写方式。当类型是接口时,IDE 可能无法确定实现类,但它肯定会很有用。

标签: javaintellij-idea

解决方案


正如评论所说,正在使用的实现是在运行时确定的,因此 Intellij 不能将使用结果限制为一种实现。但是,Intellij 支持建议创建自定义范围来限制使用搜索。这有点帮助,尽管创建一个范围需要您知道您使用的一般区域,这可能是您首先进行使用搜索的内容。就我而言,我可以创建一个仅包含我们公司为项目编写的代码的范围。这将结果从 500+ 减少到大约 80。

要在 Intellij 中创建自定义范围,请选择 File-settings-appearance & behavior-Scopes。单击对话框中间的加号,选择本地或共享,并为其命名。在对话框的右半部分,您可以包含/排除/递归包含/排除递归库、包等。

然后,当您进行查找用法(或其他搜索)时,单击结果中的齿轮图标并在下拉列表中选择您的新范围。


推荐阅读