我有扩展其他接口的接口。当使用这些接口的实现时,我的 IDE(Eclipse 和 IntelliJ 想法)无法解析实现类。这并不能阻止代码编译,但 IDE 如此不确定是非常奇特的。我有什么基本的误解吗?我提出了一个概述问题的简化结构。
基础接口
public interface Avoidable {
public void avoid();
}
扩展基础接口的接口
public interface MostlyAvoidable extends Avoidable {
public void most();
}
是执行
public class MostlyAvoidableImpl implements MostlyAvoidable {
@Override
public void most() {}
@Override
public void avoid() {}
}
第二个扩展接口
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();
}
}
现在,如果我导航到 someAvoidable.avoid(); 行并要求 IDE 找到实现避免()方法的代码,它问我是指 MostlyAvoidableImpl 还是 SomewhatAvoidableImpl。为什么?它肯定能解决这个问题吗?
这就是在 Idea 10.5 中按下Ctrl++时发生的情况(诚然,现在是相当旧的版本Alt)B,但它也发生在最新版本的 Eclipse 中。
编辑:更正最后一行中的错字-将 SimplyAvoidImpl 改为 SomewhatAvoidableImpl,并添加了屏幕截图。