Для ниже структуры класса:
class BaseClass{}
class A extends BaseClass{}
class B extends BaseClass{}
У меня есть этот метод в основном:
public static void goThroughMap(Map<String,Collection<? extends BaseClass>> myMap) {}
Теперь, чтобы вызвать этот метод, я делаю что-то вроде:
Map<String,Collection<B>> myMap = new HashMap<>();
goThroughMap(myMap); // is causing a compile time error
Ошибка:
The method goThroughMap(Map<String,Collection<? extends BaseClass>>) is not applicable for the arguments (Map<String,Collection<B>>)
Итак, как мне изменить параметры моего метода, чтобы сделать эту работу? Любые указатели для дальнейшего чтения приветствуются.
Я видел связанные вопросы другими пользователями (см. Ссылки ниже), но ни один из них не может решить проблему здесь:
Вы можете использовать следующее объявление для своего метода:
public static void goThroughMap(Map<String,? extends Collection<? extends BaseClass>> myMap)
Вы можете обратиться к этой ссылке для получения более подробной информации о таких типах: Общие вопросы
Вы должны правильно настроить свой метод:
public static <T extends BaseClass> void goThroughMap(Map<String, Collection<T>> myMap) {
...
}
B