"Попытка использовать несовместимый тип возврата" с интерфейсом Inheritance

У меня возникает проблема с несовместимыми типами возврата с использованием наследования.

public interface A { }
public interface B extends A { }

public interface C {
    Map<String, A> getMapping();
}

public interface D extends C {
    Map<String, B> getMapping();
}

Есть ли способ сделать эту работу?

В настоящий момент компилятор говорит мне, что я "Попытка использовать несовместимый тип возврата" на интерфейсе D.

Ответ 1

Я предлагаю вам использовать

interface C {
    Map<String, ? extends A> getMapping();
}

Это говорит "Карта, которая отображает String в A или подтип A". Это совместимо с Map<String, B>.

Ответ 2

Внесите следующие изменения:

interface C<E extends A> {
    Map<String, E> getMapping();
}

interface D extends C<B> {
    Map<String, B> getMapping();
}