Die Fehlermeldung sagt dass du keine Liste gespeichert hast sondern ein einzelnes CD Objekt. Das kannst du dann natürlich nicht zu ner ArrayList casten. Schau dir deine Speichermethode mal an.
Ist das nicht so, dass wenn z.B. diverse Klassen erben von einem Interface aber nicht untereinander.
Katze und Hund erben von Haustier, aber nicht Katze von Hund.
Also
Java:
publicvoidtierArzt(ArrayList<Haustier> haustiere){
haustiere.add(newKatze());// Katze erbt nicht von Hund
haustiere.add(newHund());// Hund erbt nicht von Katze}
geht wohl nicht ?
Wenn nicht mit Generics dann mit einem normalen Array oder Wildcards ?
publicvoidtierArzt(ArrayList<Haustier> haustiere){
haustiere.add(newKatze());// Katze erbt nicht von Hund
haustiere.add(newHund());// Hund erbt nicht von Katze}
Doch! Genau so geht es. Deine ArrayList<Haustier> spezifiziert, dass Du Haustiere in ihr speichern willst. Wenn Hund und Katze Haustiere sind, kannst Du sie darin speichern. Was dann aber nicht geht (oder zumindest nicht ohne Casten), ist Hunde oder Katzen aus der Liste raus zu holen. Rausholen kannst Du nur Haustiere. Nehmen wir die mit zwei Haustieren gefüllte ArrayList aus Deinem Beispiel:
Java:
// Geht, die Zusicherung per Generics ist,// dass Haustiere in der Liste enthalten sind:Haustier katze = haustiere.get(0);Haustier hund = haustiere.get(1);// Geht nicht, obwohl Du natürlich (noch) weißt,// dass an 0 eine Katze gepseichert istKatze katze = haustiere.get(0);// Weil Du es weißt, könntest Du casten// ist aber meist ein Zeichen von faulem DesignKatze katze =(Katze) haustiere.get(0);
Hä? Wie kommst Du auf diese Feststellung? Davon stand in den bisherigen Posts nichts.
Abgesehen davon ist es natürlich auch möglich, Collections (also auch ArrayList) in anderen Collections (also auch in einer ArrayList) zu speichern und wieder heraus zu holen.
Ja sorry, ist nicht so übersichtlich.
Im Post stand:
Java:
Es kommt dann folgender Fehlercode java.lang.ClassCastException: CD cannot be cast tojava.util.ArrayList
CD ist vererbt von Medien
Das sah so aus als wäre CD eine ArrayList.
Womöglich hast du recht das man verschiedene Objekte in eine ArrayList packen kann, obwohl ich das noch von einem Kapitel her kannte, wo Generics dies verhindern sollten das nicht gleiche Objekte(Klassen, ArrayLiist usw.) in die gleiche ArrayList gepackt werden. Oder hat sich bei Generics etwas geändert seit Java 5 ?
Der Fragestellende hat vermutlich mehr Infos über seinen Code.
Hier willst du ja wohl eine Liste erhalten. deine Methode gibt aber keine Liste zurück, sondern nur ein einzelnes Object:
Java:
Object objekt =null;ObjectInputStream objektEingabe;try{
objektEingabe =newObjectInputStream(newBufferedInputStream(newFileInputStream(dateiName)));
objekt = objektEingabe.readObject();
objektEingabe.close();}catch(FileNotFoundException e){...}
Also meines Erachtens nach, gibt deine Methode nur ein
Code:
Object
zurück. Du kannst dieses Objekt aber per
Code:
List#add()
in deine
Code:
ArrayList
schreiben:
Java:
haustiere.add((Haustier)objektladen(datei));
Oder du müsstest deine Methode umschreiben, damit sie gleich mal eine ganze Sammlung von Objekten zurückgibt. Dafür müsstest du aber auch die ganze Datei lesen, und nicht nur ihr erstes Objekt.