List <List > y List son tipos incompatibles en java

No conseguí este código para comstackr de ninguna manera:

List a = new ArrayList(); List<List> b = new ArrayList(); a = b; // incompatible types b = a; // incompatible types 

Parece que Java no considera que List y List Sean del mismo tipo cuando se trata de generics.

¿Porqué es eso? ¿Y hay alguna buena salida?

Contexto

Hay una función de biblioteca con la siguiente firma: public Set<Class> getSubTypesOf(final Class type) public Set<Class> getSubTypesOf(final Class type) . Esto funciona bien para los tipos simples que se pasan como argumento, pero en el caso de los generics, el resultado no se parametriza con comodines, lo que provoca que javac se queje del tipo raw. Me gustaría propagar el resultado al rest de mi aplicación como Set<Class<? extends GenericTypeHere>> Set<Class<? extends GenericTypeHere>> pero la Set<Class<? extends GenericTypeHere>> simple no funciona como espero.

EDITAR: Solución

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); } 

Bien, entonces esto se debe a una sutil diferencia semántica.

 List 

Este es el tipo sin formato de la List , que equivale a T siendo de tipo Object . Así que es lo mismo que decir:

 List 

Ahora, el comstackdor sabe a ciencia cierta que, pase lo que pase, esta es una subclase de tipo Object . Y si lo haces ..

 List myList = new ArrayList(); myList.add(new Object()); 

¡Funcionará bien! Esto se debe a que el Object es el mismo o es una derivación del tipo.

 List 

Esto es literalmente una lista de desconocidos ( Java Docs ). Ni siquiera sabemos que la subclase de las cosas aquí son de tipo Object . De hecho, el ? tipo es un tipo desconocido todo por su cuenta. ¡No tiene nada que ver con el Object ! Es por eso que cuando intentas hacer …

 List myList = new ArrayList(); myList.add(new Object()); 

¡Obtienes un error de comstackción!

  List a = new ArrayList(); List> b = new ArrayList(); a = b; 

trabajos

Set>>

implicaría que Set>> como se menciona en la respuesta del comodín anterior

¿Qué te impide usar?

Set> para propagarse a lo largo de su aplicación?