Mittwoch, 25. Mai 2011

Objekte die viel zu viele Listener-Interfaces implementieren - kann Eclipse da weiterhelfen?

Heute möchte ich einmal meine Begeisterung für eine Eclipse-Funktion teilen, die ich letztens entdeckt habe.

Was ich persönlich ja gar nicht mag, sind Klassen, die einige Listener-Interfaces zugleich implementieren. Als Interims-Entwickler und Source-Doktor sieht man so was irgendwie öfters.  Es ist dann meistens sehr schwer, diejenigen Methoden zu finden, die die eigentliche Logik des Objektes darstellen.
In dem - trotz der leeren Methoden - unübersichtlichen uns sehr konstruiertem Beispiel wären das die Methoden  macheWasUnuebersichtliches() und tueWasAnderesUnuebersichtliches()
Nunja, letztlich sind Listener bloß Objekte die dazu dienen, andere Objekte miteinander zu „verkitten“. Sie sollten deshalb nicht mit lauter public-Methoden die eigentlich so schöne Schnittstelle der Klasse „verschmutzen“.
Ich gehöre zur Fraktion derjenigen, die Listener-Interfaces lieber innerhalb der Klasse als anonyme Klasse implementieren. 
Aber es geht mir nicht darum, über Best Practices zu grübeln.
Was also tun, wenn der Code schon da ist und bereits 10 Jahre auf dem Buckel hat.  Man ist gerade knapp dran, weil im Fernsehen gleich die "Supernanny" läuft und man möchte es deswegen lieber nicht sofort umbauen :-) Also erstmal verstehen, wie alles zusammenhängt? Das ist immer eine gute Idee - gerade bevor man es umbaut. 

Noch schwieriger wird es, wenn die Klasse viele 100 Zeilen Code enthält. Dann kann man kaum noch was erkennen und schwer auseinanderhalten welche Methode zu welchem Interface gehört.


Das macht es sehr schwer später ein Refactoring zu durchzuführen... hehe... :-)




In solchen Situationen wäre es schön, wenn man eine Übersicht hätte, in der die Methoden entsprechend der Interfaces sortiert sind. So ähnlich wie die Outline in Eclipse.
Das geht! Wenn auch nicht mit der Outline. Mit einem Rechtsklick auf den Klassennamen öffnet sich das gezeigte Kontextmenü:





Das Ergebnis ist schon recht nah am gewünschten Ziel:






Simsalabim, man sieht sofort, welche Methode zu welchem Interface gehört. Via Doppelklick auf den Namen gelangt man bequem an die richtige Stelle...  



Praktisch, oder? ... Genau!

Keine Kommentare:

Kommentar veröffentlichen