2013-04-15 66 views
5

我:的Java鑄造<object>表至其接口

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

我使用Android的SQLite的寫了一個預置的數據庫管理器返回一個基於對象的名單是什麼,我檢索:

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

我無法改變這個功能的運作方式。

現在我得到兩個列表,如:

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

不過,我想這個數據來填充紡紗廠(紡紗是在Android的下拉列表)。

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

loadSpinner(wrenchSpinner, wrenches); 

但它給了我一個鑄造錯誤,你不能改變扳手部分。爲什麼Java不讓我這樣做?扳手有所有零件都做的方法,爲什麼我不能將它投入到實現和使用它的東西中?

錯誤:

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

我認爲WrenchDao應返回的List <?擴展部分> – user2147970

+0

你能粘貼實際的錯誤嗎?我認爲這是抱怨,你不能'列表'到'列表',不是你不能''扳手'''部分'...? –

+0

如果Part不是界面,而是將其設爲父類,然後讓扳手和錘子擴展Part。你甚至可以讓getName()和getId()抽象,以便扳手和錘子必須實現這些方法。 – RyPope

回答