У меня есть интерфейсы, расширяющие другие интерфейсы. Когда используются реализации этих интерфейсов, моя IDE (идея Eclipse и IntelliJ) не может решить класс реализации. Это не мешает компиляции кода, но очень странно, что IDE настолько неопределенна. Есть ли что-то фундаментальное, я недоразумение? Я представляю упрощенную структуру, которая описывает проблему.Наследование интерфейса Java вызывает недоумение 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();
}
}
Теперь, если я перейти к somewhatAvoidable.avoid(); и попросите IDE найти код, который реализует метод avoid(), он спрашивает меня, имею ли я значение MostlyAvoidableImpl или SomewhatAvoidableImpl. Зачем? Неужели это может понять это?
Это то, что происходит в Идее 10.5 при нажатии Ctrl + Alt + B (правда, довольно старая версия теперь), но это также происходит в последней версии Eclipse.
Edit: исправлена опечатка в последней строке - SimplyAvoidImpl к SomewhatAvoidableImpl, и добавил скриншот.
Где находится 'SimplyAvoidImpl'? –
@ Code-Guru Не кажется ли вам, что это просто опечатка? – maba
@maba Скорее всего. Но трудно вывести, какова должна быть коррекция. –