2013-04-15 13 views
5

mam:Java odlewania listę <object> do jego interfejs

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(); 
} 

Używam prekompilowany menedżera bazy danych napisane dla Androida SQLite, który zwraca listę obiektów w oparciu o to, co mam pobierania:

dataManager().getWrenchDao().getAll(); // returns List<Wrench> 

Nie mogę zmienić działania tej funkcji.

Teraz jestem coraz zarówno list jak:

List<Wrench> wrenches = dataManager().getWrenchDao().getAll(); 
List<Hammer> hammers = dataManager().getHammerDao().getAll(); 

Jednakże chcę, aby wypełnić błystki z tymi danymi (Spinners są rozwijane listy w Android).

loadSpinner(Spinner s, List<Part> data) { 
    ... 
    data.ElementAt(i).getName(); 
    data.ElementAt(i).getId(); 
    ... 
} 

loadSpinner(wrenchSpinner, wrenches); 

Ale to daje mi błąd w rzucaniu, że nie można zmienić klucza na części. Dlaczego Java nie pozwala mi tego zrobić? Wrenches mają wszystkie metody, które robią Części, więc dlaczego nie mogę rzucić go w coś, co implementuje i używa?

Błąd:

The method loadSpinner(Spinner, List<Part>) in the type NewActivity is not applicable for the arguments (Spinner, List<Wrench>) 
+2

myślę że WrenchDao powinny List user2147970

+0

Czy możesz wkleić rzeczywisty błąd? Myślę, że to narzeka, że ​​nie możesz rzucić 'List ' na 'List ', nie że nie możesz rzucić 'Wrench' na' Part' ...? –

+0

Co, jeśli zamiast części jest interfejsem, stajesz się klasą nadrzędną, a następnie masz możliwość rozszerzenia części przez Wrench and Hammer. Można nawet utworzyć streszczenie getName() i getId() tak, aby Wrench and Hammer musiał implementować te metody. – RyPope

Odpowiedz

Powiązane problemy