2013-04-15 8 views
5

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>) 
+2

Penso che WrenchDao deve restituire List user2147970

+0

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' ...? –

+0

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

risposta

Problemi correlati