Tengo un método como el siguiente:
Código:
Mediante el siguiente código pruebo mi método:public static void leerCajas(List<Animal<? extends Animal>> animales) { ... }
Código:
Y sorprendentemente y contra toda mi lógica, me muestra un error como el siguiente:List<Animal<Animal>> animales = new ArrayList<Animal<Animal>>(); List<Animal<Dog>> animales2 = new ArrayList<Animal<Dog>>(); leerCajas(animales); //compile error leerCajas(animales2); //compile error
Te methos leerCajas(List<Animal<? extends Animal>>) is not applicable for the arguments (List<Animal<Animal>>)
Para evitar este error en tiempo de compilación he modificado el método leerCajas de la siguiente forma:
Código:
Y de esta forma va perfecto.public static void leerCajas(List<? extends Animal<? extends Animal>> animales) { ... }
Pero a ciencia cierta, no entiendo por qué debo hacerlo de esa forma, me parece que el método en su forma original está perfecto y que no hay nada malo en la forma como estoy pasando los valores al método.
Sin embargo, parece que no termino de entender esto del generics.
Me podrían ayudar a entender por qué mi código original da error?
Muchas gracias desde ya.