我有扩展其他接口(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 中。
编辑:更正了最后一行中的拼写错误 - SimplyAvoidImpl 为 SomewhatAvoidableImpl,并添加了屏幕截图。
最佳答案
我获取了您的所有接口(interface)和类,并将其设置在我自己的 IntelliJ 中,并且没有遇到您描述的问题。
将插入符号放置在 UsesSomewhatAvoidable
中的 avoid
方法处,然后按 Ctrl+Alt+ B(转到 | 实现
):
我最终在 SomewhatAvoidableImpl
中实现:
关于Java接口(interface)继承导致IDE困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16837723/