Beim Programmieren mit Java, besonders wenn es um GUI-Programmierung geht, hat man es oft mit Listener (Observer) zu tun, z.B. um auf Aktionen wie Mouse-Klicks reagieren zu können.
Da diese Listener oftmals sehr speziell sind und auch nur an einer Stelle zum Einsatz kommen, kann man hier mit namenlosen, anonymen Klassen arbeiten.
Anonyme Klassen bieten die Möglichkeit, Schnittstellen bei der Instanziierung zu implementieren.
Hier als Beispiel das ExampleListener-Interface:
interface ExampleListener { public void onAction1(); public void onAction2(); }
Das Interface schreibt zwei Methoden vor, die wir entweder mit einer lokalen Klasse oder anonym implementieren können. Zu vielen Listeners gibt es übrigens auch Adapterklassen, die das oder die Interface(s) durch leere Methoden implementieren.
class ExampleListenerAdapter implements ExampleListener { public void onAction1() {} public void onAction2() {} }
Der Vorteil von Adaptern ist, dass wir mit der anonymen Klasse nur das implementieren müssen, was wir brauchen und nicht die komplette Schnittstelle.
So können wir jetzt beides verwenden.
object.addListner( new ExampleLister() { public void onAction1() { // Mach was bei Action1 } public void onAction2() { // Mach was bei Action2 } } );
oder
object.addListener( new ExampleListenerAdapter() { public void onAction2() { // Mach was bei Action2 } } );
Die Verwendung ist vielleicht anfangs ungewöhnlich, spart aber das Anlegen von Klassendateien und hält dadurch auch das Projekt übersichtlicher.