List <List <? >> и List <List> - несовместимые типы в java [дубликаты]
На этот вопрос уже есть ответ:
Не удается преобразовать из списка <Список> в список <Список <? >> 3 ответаЯ не получил этот код для компиляции в любом случае:
List<List> a = new ArrayList();
List<List<?>> b = new ArrayList();
a = b; // incompatible types
b = a; // incompatible types
Кажется, что Java не учитываетList
а такжеList<?>
быть того же типа, когда дело доходит до дженериков.
Почему это? И есть ли какой-нибудь хороший выход?
Контекст Есть библиотечная функция со следующей подписью:public <T> Set<Class<? extends T>> getSubTypesOf(final Class<T> type)
. Это прекрасно работает для простых типов, передаваемых в качестве аргумента, но в случае обобщенных результатов результат не параметризуется с подстановочным знаком, вызывающим жалобу javac на необработанный тип. Я хотел бы распространить результат на остальную часть моего приложения какSet<Class<? extends GenericTypeHere<?>>>
но простое приведение не работает, как я ожидаю.
Спасибо за ответы, вот как я получаю это в конце концов:
@SuppressWarnings({"rawtypes", "unchecked"})
private static Set<Class<? extends GenericTypeHere<?>>> factoryTypes() {
return (Set) new Reflections("...").getSubTypesOf(GenericTypeHere.class);
}