¿Cómo es que, en Java, puedo escribirGenéricos de Java: Lista <Container<?>> = new LinkedList <Container <Double>>() está prohibido?
List<?> list = new LinkedList<Double>();
pero no
List<Container<?>> list = new LinkedList<Container<Double>>();
donde Container es sólo algo así como
public class Container<T> { ... }
Esto ocurrió porque tengo un método que acepta a List<Container<?>>
, y me gustaría usar Arrays.asList para pasarle argumentos:
process(Arrays.asList(new Container<Double>(), new Container<Double>()));
Pero el lenguaje no permite esto, porque infiere el tipo de Arrays.asList
ser List<Container<Double>>
, y que no es asignable a List<Container<?>>
.
Si añado un contenedor de cadena parametrizada a la llamada,
process(Arrays.asList(new Container<Double>(), new Container<String>()));
todavía no funciona, ya que infiere el tipo de List<Container<? extends Serializable & Comparable<?>>>
Arrays.asList. Solo si paso algo que no es Comparable ni Serializable, funciona correctamente.
Por supuesto, puedo poner un yeso y hacer que el compilador se calle, pero me pregunto si estoy haciendo algo mal aquí.