List <List <? >> y List <List> son tipos incompatibles en java [duplicado]
Esta pregunta ya tiene una respuesta aquí:
No se puede convertir de List <List> a List <List <? >> 3 respuestasNo obtuve este código para compilar de ninguna manera:
List<List> a = new ArrayList();
List<List<?>> b = new ArrayList();
a = b; // incompatible types
b = a; // incompatible types
Parece que Java no consideraList
yList<?>
para ser del mismo tipo cuando se trata de genéricos.
¿Porqué es eso? ¿Y hay alguna salida agradable?
ContextHay una función de biblioteca con la siguiente firma:public <T> Set<Class<? extends T>> getSubTypesOf(final Class<T> type)
. Esto funciona bien para los tipos simples pasados como argumento, pero en el caso de los genéricos, el resultado no se parametriza con comodines, lo que hace que javac se queje del tipo sin formato. Me gustaría propagar el resultado al resto de mi aplicación comoSet<Class<? extends GenericTypeHere<?>>>
pero el elenco simple no funciona como esperaba.
Gracias por las respuestas, así es como lo hago funcionar al final:
@SuppressWarnings({"rawtypes", "unchecked"})
private static Set<Class<? extends GenericTypeHere<?>>> factoryTypes() {
return (Set) new Reflections("...").getSubTypesOf(GenericTypeHere.class);
}