Hey Leute ich arbeite derzeit an einem (für mich schon) etwas größerem Projekt. Ca. 25 Klassen. Nun sitze ich an einer Methode(nennen wir sie A) in einer neuen Klasse(Diese soll ein Array aus einer anderen Klasse(Klasse B) zurückliefern/ es geht nicht anders) und ich überlege, wie ich am besten vorgehen soll.
Ich habe eine Methode in der anderen Klasse(B), die mir diese ArrayList zurück gibt mit allen Elementen, jedoch habe ich sie auf private gesetzt, da nur meine toString() Methode in dieser Klasse sie nutzt.
Ich habe jetzt 2 Optionen entweder den Modifier auf public statt private setzen und toArray() aufrufen.
Oder ich erstelle in der neuen Methode eine neue ArrayList packe dort alle Daten rein indem ich den Iterator( oder erweiterte for-schleife) nutze und gebe dann toArray()... zurück.
Was bietet sich in so einem Fall mehr an?
Ich hoffe das war verständlich:noe:
erst einmal hört sich das nach einer Designschwäche im Code an. Zweitens sagst du, dass nur die toString Methode diese Methode nutzt und dann sagst du, eine andere Klasse soll sie auch benutzen können. 3. Würdest du bei erneuter Implementierung eine Redundanz im Code erzeugen, was den Code unnötig auf bläht. Da du das Ganze anscheinend nicht anders lösen kannst/willst, würde ich die Methode auf public setzen, in der neuen Klasse diese Methode aufrufen, an eine Methode aus den Collections übergeben und diese erhaltende Referenz dann zurückgeben.
Ja ich kann das leider nicht anders lösen. Also lieber ein wenig Code sparen und dafür auf public setzten?
Ist die Kapselung nicht eines der Hauptbestandteile Javas oder allgemein der OO?
Die Kapselung ist ein wichtiger Bestandteil objektorientierter Sprachen ja. Allerdings ist eine saubere Umsetzung auch Bestandteil einer oop und damit genauso wichtig. Ich würde wie gesagt die Methode auf public setzen, wenn du nicht nochmal am Design pfeilen möchtest. Allerdings ist das meine Meinung und andere im Forums haben sicherlich noch andere Ideen zur Umsetzung
Wenn eine Klasse einen Wert von einer anderen Klasse zrückgeben soll, dann lässt sich das oft durch Vererbung besser lösen. Allerdings natürlich auch nicht immer.
Oder du übergibst einfach deiner Methode das Objekt deiner anderen klasse, oder eine Kopie davon , führst dann deine beliebige Aktion aus, und lieferst das zurück was du benötigst.
Oder du hälst in deiner Neuen klasse einfach eine Referenz auf die aktuelle Instanz deiner Klasse welche deine Werte beinhaltet, und diese übergibst du dann direkt schon bei ihrer Erzeugung im Konstruktor deiner neu erstellten Klasse.
@Thallius Vererbung geht leider nicht :/. Arbeite in einem Projekt, welches ich prinzipiell nicht ändern kann/darf. Außerdem handelt es sich um eine selbst geschriebene Datenstruktur, da möchte ich nichts vererben. Habe ich aber auch nicht erwähnt. Danke dir trotzdem! Prinzipiell hast du sicher recht.
@kaoZ Ich kann die Methodendeklaration leider nicht ändern. Sonst ist das mit dem Parameter eine gute Idee. Aber es gibt ja immer vorgaben... Wie gesagt prinzipiell klappt ja auch alles. Mich hat hauptsächlich interessiert, ob eher auf public gestellt werden sollte oder ein etwas längerer/"komplizierterer" Code genommen werden sollte. Ich danke auch dir für die Antwort!