ich lerne seit einigen Monaten Java und erziele m.E. ganz gute Fortschritte. Ich bin bei der eigenen Problemrecherche im Internet schon öfters auf dieses Forum aufmerksam geworden; nun endlich habe ich mich angemeldet - und das gleich mit einem mich sehr beschäftigenden Problemfall.
Es geht um die Rückgabe einer ArrayList. Die Methode funktioniert soweit - bis auf einen Fall. Am besten ich poste zunächst einmal die Implementierung der Methode:
Als Fehlermeldung erhalte ich "no suitable method found for add(Einsendung) und blueJ zeigt mir bei nachrichtenVon.add(sV) das "add" rot an.
Eigentlich ist doch alles logisch: Die for-Schleife prüft alle Objekte einer Sammlung (ArrayList mit Namen "einsendungen") darauf, ob Sie vom Typ "NachrichtenEinsendung" sind (einer vererbten Klasse) und in diesem Falle (if), soll das entsprechende Objekt gleich in die in der Methode deklarierten neuen ArrayList eingefügt werden: nachrichten.add(sV)
Syntaktisch alles korrekt. Über eine Hilfe wäre ich sehr dankbar.
sV ist bei dir vom Typ Einsendung, deine ArrayList erwartet aber NachrichtenEinsendung. instanceof allein reicht nicht, damit der Compiler weiß, dass es der passende Typ ist, du musst es danach auch noch casten
Zum Casten gibt man einfach in Klammer den Typ, in den gecasted werden soll, vor dem zu castendem Object/Wert an.
In deinem Fall also nachrichtenVon.add((NachrichtenEinsendung) sV);
Damit kannst du dir den Cast sparen, da NachrichtenEinsendung eh vom Typ Einsendung ist.
Problem hier ist nur, das du beim späteren Iterieren nicht auf die speziellen Methoden zugreifen kannst, ohne dann zu casten.
Vielleicht ist es hilfreicher für dich, wenn du uns deine Idee hinter dem ganzen erläuterst und wir unsere Ideen beisteuern.
Um dich jetzt vollkommen zu verwirren, aber vielleicht brauchst du das später Mal, kannst du statt den oberen Code auch folgenden Benutzen:
Es ist schon schlechter Stil, dass er in einer eigentlich komplett gekapselten Methode auf eine Instanzvariable zugreift. Warum übergibt er nicht einsendungen einfach als Parameter?
Es ist schon schlechter Stil, dass er in einer eigentlich komplett gekapselten Methode auf eine Instanzvariable zugreift. Warum übergibt er nicht einsendungen einfach als Parameter?
Vielen Dank für das Angebot. Ein praktisches Ziel steckt aber nicht hinter meinem Code. Mir ging es einfach nur darum zu testen, wie man bei einem Schleifensuchlauf einer Sammlung (bestehend aus Objekten einer Superklasse und entsprechenden Subklassen) nur die Ergebnisse einer bestimmten Subklasse ausgibt. Beispiel Netzwerk: Es gibt mehrere Typen eines Beitrags (Textnachricht, Bild, Weiterleitung/ Empfehlung, News) - und der Nutzer kann auswählen: Zeige nur Textnachrichten