他のインターフェースを拡張するインターフェースがあります。これらのインターフェースの実装が使用されると、私の 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() {}
}
2 番目の拡張インターフェース
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();
}
}
さて、smouthAvoidable.void(); に移動すると、行を入力して、void() メソッドを実装するコードを見つけるよう IDE に要求すると、MostlyAvoidableImpl と SomewhatAvoidableImpl のどちらを意味するのかを尋ねられます。なんで?確かにこれを理解できますか?
Ctrlこれは Idea 10.5 で+ Alt+を押すと発生することですがB(確かに現在はかなり古いバージョンです)、Eclipse の最新バージョンでも発生します。
編集: 最後の行のタイプミスを修正 - SimplyAvoidImpl を SomewhatAvoidableImpl に変更し、スクリーンショットを追加しました。