Java-vorgefertigten Klasse neue Methode beibringen?

... komplette Frage anzeigen

2 Antworten

Theoretisch bräuchte ich ja eine neue Klasse, zB MeineArrayListe, und dann extends ArrayList...aber das möchte ich nicht.

Das wäre aber sozusagen der sauberste Weg und auch im Sinne der objektorientierten Programmierung

Dann gäbe es noch die Möglichkeit, dass ich eine eigene ArrayList schreibe, aber wie sorge ich nun dafür, dass diese auch alle Methoden einer ArrayList hat? 

Tja - am einfachsten dadurch dass Du deine vorherige Idee umsetzt und deine eigene Klasse die Klasse ArrayList erweitern läßt. Dann hat die nämlich automatisch alle Methoden der Klasse ArrayList.

Zu guter letzt kannst Du natürlich auch in jeder anderen Klasse eine entsprechende Methode definieren die als Parameter eine ArrayList entgegennimmt und daraus dann irgendeine Länge berechnet und zurückgibt.

Da diese Methode ja nur auf die Methoden des übergebenen Parameters zurückgreift und auf keine Member-Variablen oder Methoden der Klasse in der sie definiert ist kann (muss aber nicht) diese Methode dann selbst auch als Static definiert werden

(Möchte statische Methoden vermeiden)

Wenn eine Methode keinen Zugriff auf die Member-Variablen oder Methoden benötigt dann SOLLTE man sie als Static defininiert.

Das erleichtert zumindest die Lesbarkeit des Codes.

Deine Methode "Länge" ist ja nichts anderes wie ein mathematische Funktion die aus einem Inputparameter einen Output errechnet der nur vom übergebenen Inputparameter abhängt.

Also nichts anderes wie z.B. sin() oder cos() und die sind in Java in Math.sin() und Math.cos() auch als static definiert....

Wenn man neu in Java ist tendiert man manchmal dazu die Zahl der eigenen Klassen klein zu halten - das entpuppt sich im Nachhinein regelmässig als Fehlentscheidung...

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von chr0m92
29.02.2016, 12:52

Vielen Dank für die ausführliche Antwort!

Wenn ich das nur für mich programmieren würde, würde ich es wahrscheinlich statisch machen, aber mein Prof hat da was dagegen... der ist allergisch gegen static-Zeugs :(

0
Kommentar von Reyha24
29.02.2016, 13:58

Was spricht gegen wrapping?

0
Kommentar von Reyha24
29.02.2016, 14:54

Ein Nachteil vom Wrapping ist Boilerplate-Code. Die Nachteile vom Vererben sind aber deutlich gravierender. Wenn man nicht aufpasst, dann verändert man das Verhalten der Oberklasse, wo es überhaupt nicht notwendig war. Wozu braucht man die Möglichkeit Member einer Oberklasse zu überschreiben? Hier macht das keinen Sinn. Gewünscht ist lediglich eine Funktionalität, die auf Daten eines Containers basiert und das geht wunderbar ohne kritische Probleme durch wrapping.

0
Kommentar von Reyha24
29.02.2016, 16:12

Du hast die unerwarteten Folgen schon erkannt. Beim wrapping hast du diese nicht. Zudem möchtest du die Implementierung der ArrayList nicht ändern, sondern nur eine weitere Funktion hinzufügen, die auf einer ArrayList basiert. Wie gesagt :p

0
Kommentar von Reyha24
29.02.2016, 16:14

Viele tendieren zur Vererbung, obwohl sie manchmal fehl am Platz ist.

0

In C# gibt es dafür die Extensions, in Java muß man sich anders behelfen, siehe etwa hier: http://stackoverflow.com/questions/18977706/can-i-create-extensions-in-java-like-i-do-in-c

Standardlösung ist es eben, eine Helper-Klasse zu schreiben mit statischen Methoden oder eine abgeleitete Klasse zu erstellen.

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Reyha24
29.02.2016, 12:25

Wobei eine abgeleitete Klasse in diesem Fall nicht sinnvoll wäre. Er möchte die grundsätzliche Funktionalität der ArrayList nicht erweitern.

0

Was möchtest Du wissen?