ho:Java lanciare un elenco di <object> alla sua interfaccia
class Hammer Implements Part {
public String getName() { return name; }
public int getId() { return id; }
...
}
class Wrench implements Part {
public String getName() { return name; }
public int getId() { return id; }
...
}
interface Part {
String getName();
int getId();
}
Sto usando un gestore di database precompilati scritto per SQLite Android che restituisce un elenco di oggetti in base a ciò che sto Recupero:
dataManager().getWrenchDao().getAll(); // returns List<Wrench>
Non riesco a modificare il funzionamento di questa funzione.
Ora sto ottenendo entrambe le liste come:
List<Wrench> wrenches = dataManager().getWrenchDao().getAll();
List<Hammer> hammers = dataManager().getHammerDao().getAll();
Tuttavia, voglio riempire filatori con questi dati (Spinners sono gli elenchi a discesa in Android).
loadSpinner(Spinner s, List<Part> data) {
...
data.ElementAt(i).getName();
data.ElementAt(i).getId();
...
}
loadSpinner(wrenchSpinner, wrenches);
Ma mi dà un errore di trasmissione che non è possibile modificare la chiave in parte. Perché Java non mi consente di farlo? Le chiavi hanno tutti i metodi che le parti fanno così perché non posso lanciarlo in qualcosa che implementa e usarlo?
Errore:
The method loadSpinner(Spinner, List<Part>) in the type NewActivity is not applicable for the arguments (Spinner, List<Wrench>)
Penso che WrenchDao deve restituire List estende la parte> – user2147970
Puoi incollare l'errore attuale? Penso che si possa lamentare che non si può lanciare 'Lista' a 'Lista ', non che non si possa castare 'Chiave inglese 'su' Parte' ...? –
Cosa succede se anziché la parte è l'interfaccia, la si diventa la classe genitore e quindi si estendono la parte di Wrench e Hammer. Potresti anche rendere getName() e getId() astratti in modo che Wrench e Hammer debbano implementare questi metodi. – RyPope