Generics und Casting eines Objekts

needInput

Mitglied
Hey,
warum muss hier gecastet werden?
Java:
class Mannschaft<T extends Spieler>{
    Collection<T> player = new ArrayList();
   
    void aufnehmen(Spieler spieler) {
     this.player.add((T)spieler); //hier
}
}

Wir schränken doch zuvor den generischen Bereich auf alles unter Spieler ist ein.
Deswegen wird doch das T intern durch einen Spieler ersetzt.
Ich verstehe einfach den Cast Grund nicht.
 
Wir schränken doch zuvor den generischen Bereich auf alles unter Spieler ist ein.
Du schränkst es auf eine bestimmte Klasse unter Spieler ein, nicht auf alles unter Spieler. Jedes T muss ein Spieler sein, aber nicht jeder Spieler muss ein T sein.


Stell dir vor, es gibt zwei Unterklassen von Spieler: HandballSpieler und FußballSpieler.
Mannschaft kannst du dann als Mannschaft<HandballSpieler> deklarieren, T wäre dann HandballSpieler.

Daran siehst du auch, dass das casten an der Stelle fehlerhaft ist (auch wenn es nicht zwingend einen Compilezeit- oder Laufzeitfehler wirft): Deiner HandballMannschaft kannst du damit FußballSpieler hinzufügen.
 

Neue Themen


Zurück
Oben