2013-04-15 2 views
5

Casting ich habe:Java eine Liste von <object> seine Schnittstelle

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

ich einen vorkompilierte Datenbank-Manager für Android SQLite geschrieben verwende, das eine Liste von Objekten zurückgibt, basierend auf was ich Abrufen:

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

Ich kann nicht ändern, wie diese Funktion funktioniert.

nun beid Listen wie ich erhalte:

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

Allerdings mag ich mit diesen Daten Spinner füllen (Spinner ist die Dropdown-Listen in Android).

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

loadSpinner(wrenchSpinner, wrenches); 

Aber es gibt mir einen Casting-Fehler, dass Sie den Schraubenschlüssel nicht zu Teil ändern können. Warum lässt mich Java das nicht tun? Schraubenschlüssel haben alle Methoden, die Teile tun, warum kann ich sie nicht in etwas umwandeln, das sie implementiert und benutzt?

Fehler:

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

Ich denke, dass WrenchDao sollte Liste zurückkehren user2147970

+0

Kannst du den tatsächlichen Fehler einfügen? Ich denke, es beschwert sich, dass man 'List ' nicht in 'List ' schreiben kann, nicht dass man 'Wrench' nicht in' Part' umwandeln kann ...? –

+0

Was wäre, wenn statt Teil die Schnittstelle ist, Sie es zur Elternklasse machen und dann Wrench und Hammer Teil erweitern. Sie könnten sogar getName() und getId() abstract machen, damit Wrench und Hammer diese Methoden implementieren. – RyPope

Antwort

Verwandte Themen