Por favor, considere el siguiente fragmento:¿Cómo puedo lanzar una lista usando genéricos en Java?
public interface MyInterface {
public int getId();
}
public class MyPojo implements MyInterface {
private int id;
public MyPojo(int id) {
this.id = id;
}
public int getId() {
return id;
}
}
public ArrayList<MyInterface> getMyInterfaces() {
ArrayList<MyPojo> myPojos = new ArrayList<MyPojo>(0);
myPojos.add(new MyPojo(0));
myPojos.add(new MyPojo(1));
return (ArrayList<MyInterface>) myPojos;
}
La sentencia return hace un casting que no compila. ¿Cómo puedo convertir la lista myPojos a la lista más genérica, sin tener que pasar por cada elemento de la lista?
Gracias
La segunda solución es mejor que en mi humilde opinión. La devolución de comodines generalmente se considera una mala práctica, porque restringe el código del cliente. En este caso con ArrayList extends MyInterface> solo puede leer de la lista y no puede agregarle nada. –
Eso puede ser lo que se quiere, por supuesto, simplemente no lo sabemos. (Se debe casi seguro que utilizar la lista en lugar de ArrayList también, o, posiblemente, sólo Iterable o Colección .) –
1 para el uso de los tipos más genéricos (por ejemplo, la lista, Colección ). Pero devolver comodines rara vez es lo que quieres. Si te estás inclinando hacia la inmutabilidad, hay mejores formas de hacerlo. Naftalin y Wadler hablan sobre esto en "Java Generics and Collections". –