Java接口(interface)继承导致IDE困惑

标签 java eclipse inheritance interface intellij-idea

我有扩展其他接口(interface)的接口(interface)。当使用这些接口(interface)的实现时,我的IDE(Eclipse和IntelliJ idea)无法解析实现类。这并不妨碍代码编译,但 IDE 的不确定性很奇怪。我有什么根本性的误解吗?我提出了一个概述问题的简化结构。

基本接口(interface)

public interface Avoidable {

    public void avoid();

}

扩展基础接口(interface)的接口(interface)

public interface MostlyAvoidable extends Avoidable {

    public void most();

}

正在实现

public class MostlyAvoidableImpl implements MostlyAvoidable {
    @Override
    public void most() {}

    @Override
    public void avoid() {}
}

第二个扩展接口(interface)

public interface SomewhatAvoidable extends Avoidable {

    public void somewhat();

}

及其实现

public class SomewhatAvoidableImpl implements SomewhatAvoidable {

    @Override
    public void avoid() {}

    @Override
    public void somewhat() {}

}

最后一个类使用以下实现之一:

public class UsesSomewhatAvoidable {

    private SomewhatAvoidable somewhatAvoidable;

    public UsesSomewhatAvoidable(SomewhatAvoidable somewhatAvoidable) {
        this.somewhatAvoidable = somewhatAvoidable;
    }

    public void someMethod() {
        somewhatAvoidable.avoid();
    }
}

现在,如果我导航到 SomethingAvoidable.avoid();行并要求 IDE 查找实现 escape() 方法的代码,它会询问我是指 MoSTLyAvoidableImpl 还是 SomewhatAvoidableImpl。为什么?它肯定能解决这个问题吗?

这是在 Idea 10.5 中按 Ctrl+Alt+B 时发生的情况(诚然,现在是一个相当旧的版本),但它也发生在最新版本的 Eclipse 中。

Idea 10.5 behaviour

编辑:更正了最后一行中的拼写错误 - SimplyAvoidImpl 为 SomewhatAvoidableImpl,并添加了屏幕截图。

最佳答案

我获取了您的所有接口(interface)和类,并将其设置在我自己的 IntelliJ 中,并且没有遇到您描述的问题。

将插入符号放置在 UsesSomewhatAvoidable 中的 avoid 方法处,然后按 Ctrl+Alt+ B(转到 | 实现):

enter image description here

我最终在 SomewhatAvoidableImpl 中实现:

enter image description here

关于Java接口(interface)继承导致IDE困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16837723/

相关文章:

java - 如何在Eclipse中的Java程序中以非侵入的方式添加跟踪

java - 避免 instanceof

java - 退出 ssl session

javascript - Java 到 JavaScript 类型转换算法

java - 我在 eclipse 中收到错误,提示 Jar 中缺少一个类,并且该类不是 JAR ,在这种情况下可以做什么?

java - 如何配置 mvn/Jrebel/wtp/gwt/eclipse 以便随着服务接口(interface)的变化顺利工作

c++ - 关于继承和覆盖的问题

C++调用从基类派生的覆盖函数

java - 如何在链表中制作shuffle方法

java - Spring Sockjs 中 MissingSessionUser 异常