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<?>>> но простое приведение не работает, как я ожидаю.

EDIT: Решение

Спасибо за ответы, вот как я получаю это в конце концов:

@SuppressWarnings({"rawtypes", "unchecked"})
private static Set<Class<? extends GenericTypeHere<?>>> factoryTypes() {
    return (Set) new Reflections("...").getSubTypesOf(GenericTypeHere.class);
}

Ответы на вопрос(2)

Ваш ответ на вопрос