Was ist der beste Weg zu konvertieren eine Reihe von Java-Objekten an andere Objekte?
Grundlegenden Java-Frage hier eine echte Neuling. Ich habe eine Reihe von Java-Objekten (der Klasse "MyClass") implementieren eine bestimmte Schnittstelle (Interface "MyIfc"). Ich habe eine Reihe dieser Objekte, gespeichert in einer privaten variable in meiner Klasse ist wie folgt deklariert:
protected Set<MyClass> stuff = new HashSet<MyClass>();
Brauche ich, um eine öffentliche Methode, die zurückgibt, dieser Satz als eine Sammlung von Objekten des Typs "MyIfc".
public Collection<MyIfc> getMyStuff() {...}
Wie mache ich die Konvertierung? Die folgende Zeile gibt mir eine Fehlermeldung, dass es nicht die Konvertierung zu tun. Ich hätte gedacht der compiler wusste, dass Objekte der Klasse MyClass implementiert MyIfc und hätte demnach behandelt.
Collection<MyIfc> newstuff = stuff;
Jede Erleuchtung dankbar.
Collection<? extends Mylfc>
?InformationsquelleAutor HDave | 2010-04-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wohl die richtige Art und Weise ist:
Wenn die Klasse zu groß ist, das zu tun, können Sie tun:
InformationsquelleAutor Yishai
Den compiler nicht, wie Sie die Zuordnung von Sachen zu newstuff, denn es legt die Möglichkeit offen, die Dinge in newstuff implementieren MyIfc aber nicht vom Typ MyClass. Sie können Ihre getter-erstellen Sie Ihre eigene Sammlung:
InformationsquelleAutor Nathan Hughes
Brauchen Sie nicht zu tun, und keine Konvertierung. Sie müssen geben Sie Ihre
stuff
alsSet<MyIfc>
.Hintergrund: ja, es ist richtig, dass, wenn Sie ein Objekt des Typs
MyClass
diese auch nutzbar alsMyIfc
Instanz. Aber Sie explizit typisierte Ihren Satz, als der TypMyClass
. Und das ist einfach etwas anderes als eine Menge von TypMyIfc
. Nachdem alle, Sie könnten auch andere Klassen, implementierenMyIfc
und dann könnt Ihr Sie auch in IhremSet<MyIfc>
aber nicht inSet<MyClass>
.InformationsquelleAutor Gerd Klima
Google collections definieren ein Bündel von faulen Adaptern, die möglicherweise für Ihre Zwecke geeignet sind.
Einer ist besonders Collections2.verwandeln. Hier ist ein Beispiel, wie die Anpassung Ihrer Sammlung:
Set<MyIfc>
intern. Und beweare Ihr code return-eine live-Ansicht, die nicht hinzufügen/addAll.Ich Stimme zu, es macht keinen Sinn, um all dies zu tun.
InformationsquelleAutor Alexander Pogrebnyak