perche il seguente frammento:Come posso trasmettere una lista usando i generici in 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;
}
L'istruzione return fa un casting che non può essere compilato. Come posso convertire la lista myPojos nell'elenco più generico, senza dover passare per ogni elemento della lista?
Grazie
La seconda soluzione è migliore IMHO. Restituire le wild card è generalmente considerato una cattiva pratica, b/c limita il codice client. In questo caso con ArrayList estende MyInterface> è possibile solo leggere dall'elenco e non è possibile aggiungervi nulla. –
Questo potrebbe essere ciò che volevamo, ovviamente - semplicemente non lo sappiamo. (Si deve quasi certamente utilizzare Elenco invece di ArrayList pure, o forse solo Iterable o Collection .) –
+1 per utilizzare altri tipi generici (es Elenco, Collection ). Ma il ritorno dei caratteri jolly è raramente quello che vuoi. Se sei incline all'immutabilità, ci sono modi migliori per farlo. Naftalin e Wadler parlano di questo in "Java Generics and Collections". –