2013-04-15 32 views
5

tôi có:Java đúc một danh sách các <object> để giao diện của nó

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

Tôi đang sử dụng một trình quản lý cơ sở dữ liệu được xây dựng sẵn bằng văn bản cho SQLite Android mà trả về một danh sách các đối tượng dựa trên những gì tôi đang lấy:

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

Tôi không thể thay đổi cách hoạt động của chức năng này.

Bây giờ tôi nhận được cả hai danh sách như:

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

Tuy nhiên, tôi muốn cư spinners với dữ liệu này (Spinners là danh sách đổ xuống trong android).

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

loadSpinner(wrenchSpinner, wrenches); 

Nhưng nó cho tôi lỗi truyền mà bạn không thể thay đổi Cờ lê thành một phần. Tại sao Java không cho tôi làm điều này? Wrenches có tất cả các phương pháp mà các bộ phận làm như vậy tại sao tôi không thể đúc nó vào một cái gì đó nó thực hiện và sử dụng nó?

Lỗi:

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

Tôi nghĩ rằng WrenchDao nên trả lại List user2147970

+0

Bạn có thể dán lỗi thực tế không? Tôi nghĩ rằng nó phàn nàn rằng bạn không thể bỏ 'Danh sách ' vào 'Danh sách ', không phải là bạn không thể bỏ' Cờ lê' thành 'Phần' ...? –

+0

Điều gì sẽ xảy ra nếu thay vì Phần là giao diện, bạn đặt nó là lớp cha và sau đó có Wrench và Hammer mở rộng Part. Bạn thậm chí có thể làm cho trừu tượng getName() và getId() để Wrench và Hammer phải thực hiện các phương thức đó. – RyPope

Trả lời

Các vấn đề liên quan