Generische Klassen und Casting

wallross

Mitglied
Hallo allerseits,

ich habe mir eine generische Klasse MyTreeNode<T>, die einen Baumknoten repräsentiert, definiert und habe nun verschiedene von dieser abgeleitete Klassen erstellt, also zum Beispiel MyStringTreeNode extends MyTreeNode<String>, die der jewiligen Basisklasse noch Funktionalität hinzufügen. Erzeuge ich nun ein Objekt der Klasse MyStringTreeNode und verwende die von MyTreeNode<String> geerbte Methode getChildren, so erhalte ich Objekte vom Typ MyTreeNode<String> zurück. Diese möchte ich nun gerne einfach nach MyStringTreeNode casten. Dies funktioniert aber offensichtlich nicht und bringt zur Laufzeit eine java.lang.ClassCastException.

Meine Fragen daher:
1. Warum tritt das Problem auf?
2. Ich würde gerne die von MyTreeNode<String> bereit gestellten Methoden nutzen und eben noch zusätzliche Methoden verwenden. Wie kann ich das erreichen?

Vielen Dank und viele Grüße,
Friederike
 

Marco13

Top Contributor
Wenn die einzelnen Objekte wirklich vom Typ MyStringTreeNode SIND, dann kann man sich auch casten. (Der Computer irrt sich da im Allgemeinen eher selten). Ein KSKB würde vielleicht helfen.
 

Noctarius

Top Contributor
So wie das klingt muss der Kopf von MyStringTreeNode so aussehen:
Java:
class MyStringTreeNode extends MyTreeNode<String>

Nur dann klappt das casten.
 

wallross

Mitglied
Hallo,

danke für die schnellen Antworten. Leider ist mein Problem noch nicht gelöst:(

@Noctarius: Freilich habe ich die Klasse so definiert ...
@Marco13: ein KSKB habe ich mir ebenfalls erstellt und das funktioniert ebenfalls nicht. Es sieht folgendermaßen aus:

Ich habe mir eine Klasse MyArrayList definiert:

Java:
import java.util.ArrayList;


public class MyArrayList extends ArrayList<String> {
	private static final long serialVersionUID = -5164702379587769464L;

}

und dann folgenden Cast probiert (der mit einem Laufzeitfehler scheiterte):

Java:
import java.util.ArrayList;
import java.util.HashMap;


public class MyGenericsTest {
	public static void main(String[] args) {
		ArrayList<String> list = new ArrayList<String>();
		MyArrayList myList = (MyArrayList) list;
}}

Friederike
 

wori

Mitglied
1. Du kannst im Vererbungsbaum nur von Kind zu Elternklasse casten nicht umgekehrt.

2. MyTreeNode mtn = new MyStringTreeNode();
 
S

SlaterB

Gast
andersrum würde es funktionieren:
ArrayList<String> l = new MyArrayList();
List<String> l2 = new MyArrayList();

mit Generics hat das im Grunde gar nix zu tun, hättest du auch zunächst ohne testen können
Java:
public class Test {
    public static void main(String[] args)  {
        Object o = new Object();
        MyArrayList myList = (MyArrayList)o; 
        // macht wenig Sinn, nicht jedes beliebige Object kann sich wie MyArrayList verhalten,
        // funktioniert aber, falls in o zufällig ein MyArrayList-Objekt drinsteckt
    }
}

class MyArrayList extends Object 
// extends kann man auch weglassen, alles erbt von Object
{}
 

Landei

Top Contributor
Um das blöde Casten zu vermeiden, gibt es einen generischen Trick:
Java:
import java.util.List;
public abstract class MyTreeNode<T, N extends MyTreeNode<T, N>> {
   abstract List<N> getChildren(); //N ist "die Klasse, wo wir grade drin sind"
}

import java.util.List;
import java.util.ArrayList;
public class MyStringTreeNode extends MyTreeNode<String, MyStringTreeNode> {
   List<MyStringTreeNode> children = new ArrayList<MyStringTreeNode>();
   public List<MyStringTreeNode> getChildren() {
      return children;
   }
}

oder mit den children in der Papaklasse:
Java:
import java.util.List;
import java.util.ArrayList;
public abstract class MyTreeNode<T, N extends MyTreeNode<T, N>> {
   private List<N> children = new ArrayList<N>();
   public List<N> getChildren(){
     return children;
   }
}

public class MyStringTreeNode extends MyTreeNode<String, MyStringTreeNode> {
}
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Generische Klassen/Interface Java Basics - Anfänger-Themen 1
H linkedlist generische klassen Java Basics - Anfänger-Themen 169
M Generische Klassen "FlaschenRegal" Java Basics - Anfänger-Themen 13
S Erste Schritte Generische Klassen sind toll ....aber warum sollte ich das je benutzen? Java Basics - Anfänger-Themen 3
M Klassen Generische Klassen, Personen und Gruppen Java Basics - Anfänger-Themen 6
W Generische Klassen Java Basics - Anfänger-Themen 3
C Generische Klassen, das erste Mal. Java Basics - Anfänger-Themen 8
J generische klassen neue Instanz Java Basics - Anfänger-Themen 5
H Generische Klassen. Java Basics - Anfänger-Themen 16
I Generische Funktion Java Basics - Anfänger-Themen 3
B Generische Typen für dynamisches Formular Java Basics - Anfänger-Themen 3
H Generische Konstruktor Java Basics - Anfänger-Themen 12
Kirby.exe Generische Objekt Instanz erstellen Java Basics - Anfänger-Themen 14
D Generische Klasse Java Basics - Anfänger-Themen 6
M Datentypen Generische Datentypen - Syntax Java Basics - Anfänger-Themen 25
O Generische Typen Java Basics - Anfänger-Themen 9
Queiser Datentypen 2 generische Datentypen für eine Schnittstelle Java Basics - Anfänger-Themen 1
M Generische Liste aus Comparable-Objekten Java Basics - Anfänger-Themen 6
J Sortierte generische Liste Java Basics - Anfänger-Themen 1
D statische generische Methoden Java Basics - Anfänger-Themen 3
S Wie muss ich die Generische Methode schreiben? Java Basics - Anfänger-Themen 6
M Methoden Generische Klasse - ändern einzelner Attributwerte Java Basics - Anfänger-Themen 2
S generische methode mit verschiedenen datentypen Java Basics - Anfänger-Themen 3
N Generische Schnittstellen Java Basics - Anfänger-Themen 2
B generische LinkedList nach Häufigkeit der Elemente füllen Java Basics - Anfänger-Themen 6
D Generische Typen Java Basics - Anfänger-Themen 20
L Generische Liste Java Basics - Anfänger-Themen 4
B Generische Queue programmieren Java Basics - Anfänger-Themen 5
S Generische Methode soll Objekte als Parameter erlauben die bestimmtes Interface implementieren^ Java Basics - Anfänger-Themen 9
A Probleme mit MergeSort Generische Liste Java Basics - Anfänger-Themen 0
A Generische Methode Java Basics - Anfänger-Themen 4
H Collections List in List<SpecificType> als stat. generische Methode zurückgeben Java Basics - Anfänger-Themen 4
J Probleme mit static generische Klasse Java Basics - Anfänger-Themen 6
M Generische Liste Java Basics - Anfänger-Themen 4
B Generische Methode Java Basics - Anfänger-Themen 2
B Generische Klasse Java Basics - Anfänger-Themen 7
B Generische Methoden Java Basics - Anfänger-Themen 8
F Collections Generische Klasse/Methoden Java Basics - Anfänger-Themen 19
L Generische Warteschlange Java Basics - Anfänger-Themen 8
A Generische Datentypen Java Basics - Anfänger-Themen 8
bluerob generische ArrayList -> erbende Objekte auslesen Java Basics - Anfänger-Themen 24
L Generische Containerklasse Java Basics - Anfänger-Themen 9
V Methoden Umwandlung in generische Methode Java Basics - Anfänger-Themen 8
A Generische Collections und Vererbung Java Basics - Anfänger-Themen 2
S Generische HashMap Java Basics - Anfänger-Themen 2
L Generische ArrayList, CastProblem Java Basics - Anfänger-Themen 2
W generische Module Java Basics - Anfänger-Themen 2
S Generics und "generische Feldzuweisungen" Java Basics - Anfänger-Themen 5
C unterschied generische typen und supertypen als methodenparameter Java Basics - Anfänger-Themen 3
D Datentypen Generische Collections und Warnings Java Basics - Anfänger-Themen 8
F Generische Methoden Problem Java Basics - Anfänger-Themen 5
E Generische Arrays durch Typecast mit Object-Array Java Basics - Anfänger-Themen 11
K Generische Klasse mit innerer Klasse | Problem mit Array Java Basics - Anfänger-Themen 6
B Was passiert, wenn eine konkrete Klasse von generische Klasse erbt? Java Basics - Anfänger-Themen 14
B Generische Vererbung was ist der Unterschied? Java Basics - Anfänger-Themen 4
F Generische Typen auch für statische Methoden? Java Basics - Anfänger-Themen 13
J array über generische arraylist Java Basics - Anfänger-Themen 7
B instanceof Prüfung für generische Typen Java Basics - Anfänger-Themen 5
N 2 dimensionale generische Arrays Java Basics - Anfänger-Themen 9
H Statische generische Methode Java Basics - Anfänger-Themen 2
G Frage zum Ungang mit Generische Datentypen Java Basics - Anfänger-Themen 4
0x7F800000 generische arrays mal wieder )-; Java Basics - Anfänger-Themen 6
D generische methode <T> void . Java Basics - Anfänger-Themen 9
J Generische Methoden Java Basics - Anfänger-Themen 6
G Doppelt verkettete, generische Liste Java Basics - Anfänger-Themen 11
S Parameterübergabe: Generische Klasse Java Basics - Anfänger-Themen 4
S generische Felder Java Basics - Anfänger-Themen 2
P Generische Klasse Java Basics - Anfänger-Themen 8
F Generische Methode - was bringt der Wildcard Operator? Java Basics - Anfänger-Themen 7
F Generische Liste von generischen Objekten. Java Basics - Anfänger-Themen 3
H generische Methoden Java Basics - Anfänger-Themen 5
N generische HashMap und Iterator Java Basics - Anfänger-Themen 2
H generische Bausteine, heterogene Datenstrukturen Java Basics - Anfänger-Themen 2
J Methodenaufrufe abstrakte Klassen, Interfaces Java Basics - Anfänger-Themen 17
M Abstrakte Klassen - Notation Java Basics - Anfänger-Themen 9
Detlef Bosau Nachladen von Klassen zur Laufzeit Java Basics - Anfänger-Themen 24
M Anonyme Klassen - Warum wird in der Konsole nichts ausgegeben? Java Basics - Anfänger-Themen 1
MoxMorris Einige Methoden aus verschiedenen Klassen nacheinander auszuführen läuft seltsam Java Basics - Anfänger-Themen 2
I Klassen von einem package laden, Statisches Feld auslesen und Objekt erstellen Java Basics - Anfänger-Themen 8
I 2 verschiedene Klassen mit gleichen Property vergleichen Java Basics - Anfänger-Themen 13
C Array von Klassen Java Basics - Anfänger-Themen 2
monsterherz 2 Klassen daher Probs mit dem Dateinamen Java Basics - Anfänger-Themen 9
C Kommunikation zwischen 2 Klassen Java Basics - Anfänger-Themen 9
I JPA Query für mehrere Klassen Java Basics - Anfänger-Themen 3
I @Entity Klassen, Service Beans etc. aus einem Share Projekt beziehen? Java Basics - Anfänger-Themen 26
S IntelliJ geht alle Klassen durch Java Basics - Anfänger-Themen 9
I Gleiche Klassen und Methoden in unterschiedlichen Projekten nutzen Java Basics - Anfänger-Themen 2
T variablen klassen übergreifend Java Basics - Anfänger-Themen 12
N Klassen Methoden anderer Klassen aufrufen Java Basics - Anfänger-Themen 4
D Klassen Klassen Kommunikation Java Basics - Anfänger-Themen 12
Encera Auf Objekte aus anderer Klassen zugreifen Java Basics - Anfänger-Themen 20
berserkerdq2 Zwei Klassen Erben von der Klasse A, die eine Klasse kann ich an Methoden übergeben, die als Parameter A haben, die andere nicht? Java Basics - Anfänger-Themen 3
M Andere Methoden in anderen Klassen aufrufen Java Basics - Anfänger-Themen 11
L Methoden in anderen Klassen nutzen Java Basics - Anfänger-Themen 6
D Klassen und Vererbung Java Basics - Anfänger-Themen 2
L Best Practice Annotierte Klassen im Classpath herausfinden Java Basics - Anfänger-Themen 1
P Mit dem Scanner Klassen aufrufen Java Basics - Anfänger-Themen 3
O Klassen Zusammenspiel zwischen 2 Klassen Java Basics - Anfänger-Themen 1
K Zweite Ausgabe von vererbten Klassen Java Basics - Anfänger-Themen 3
M Wie können Klassen nicht-materialisierte Attribute haben, die nur über get/ set-Mehoden simuliert sind? Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben