Frage

    

Diese Frage bereits eine Antwort hier:

         

Nehmen wir an Klasse B erstreckt Klasse A. Ich habe einen List<A>, dass ich weiß zufällig, nur Instanzen von B enthält. Gibt es eine Möglichkeit ich die List<A> zu einem List<B> werfen kann?

Es scheint, dass meine einzige Möglichkeit ist, über die Sammlung iterieren, ein Element zum Zeitpunkt Gießen, Erstellen eine neue Kollektion. Dies scheint eine völlige Verschwendung von Ressourcen Typ Löschung macht dies völlig unnötig zur Laufzeit gegeben.

War es hilfreich?

Lösung

Sie können die nicht typisierte Liste Schnittstelle umgewandelt durch:

List<A> a = new ArrayList<A>();
List<B> b = (List)a;

Andere Tipps

Sie können versuchen, diese:

List<A> a = new ArrayList<A>();
List<B> b = (List<B>) (List<?>) a;

Es wird auf die Antwort von Jarnbjo, sondern auf nicht roh Listen verwenden.

List<A> ist nicht ein Subtyp von List<B>!

Die JLS erwähnt auch, dass explizit :

  

Subtyping erstreckt sich nicht durch generische Typen. T <: U nicht, dass C<T> <: C<U> bedeutet

Ein Weg, eine Art Sicherheit mit minimalen Auswirkungen auf die Leistung zu behalten ist ein Wrapper . Dieses Beispiel ist etwa Sammlung, würde die Liste Fall sehr ähnlich sein und einen Tag vielleicht würde ich auch schreiben. Wenn jemand anderes vor mir kommt, bitte lassen Sie uns den Code teilen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top