Sto avendo un crampo al cervello: Ho un public interface SomeInterface
e un static private class SomeClass
e sto cercando di restituire un List<SomeInterface>
da uno dei miei metodi, ma ho la errore (sulla linea return list;
sottostante):java: conversione da Lista <SomeClass> la lista <SomeInterface> quando SomeClass implementa SomeInterface
Type mismatch: cannot convert from List<GenericList1.SomeClass> to
List<GenericList1.SomeInterface>
Come posso risolvere questo problema senza dover creare una nuova lista?
Precisazione: Non voglio l'elenco per essere creato come List<SomeInterface>
(forse la soluzione più ovvia) perché privatamente voglio mantenere un List<SomeClass>
per consentire l'accesso futuro ai metodi di SomeClass oltre a quelli nell'interfaccia pubblica. Questo non è mostrato nel caso di esempio qui sotto, ma nel mio vero programma ho bisogno di questo.
import java.util.ArrayList;
import java.util.List;
public class GenericList1 {
public interface SomeInterface
{
public int getX();
}
private static class SomeClass implements SomeInterface
{
final private int x;
@Override public int getX() {
return this.x;
}
public SomeClass(int x) { this.x = x; }
}
public static void main(String[] args) {
List<SomeInterface> list = createList(10);
printList(list);
}
private static void printList(List<SomeInterface> list) {
for (SomeInterface si : list)
System.out.println(si.getX());
}
private static List<SomeInterface> createList(int n) {
List<SomeClass> list = new ArrayList<SomeClass>();
for (int i = 0; i < n; ++i)
list.add(new SomeClass(i));
return list;
}
}
ah, OK, questo funziona. Nel mio programma reale sto restituendo una lista <> incapsulata da Collections.unmodifiableList() in modo che possano essere letti solo. –
La risposta aveva un collegamento all'articolo 28 ma il collegamento è ora morto. Un PDF del libro è disponibile qui: https://github.com/ldfaiztt/CSE331/blob/master/Effective.Java.2nd.Edition.May.2008.3000th.Release.pdf – Paul