Beispiel für innere Klassen, die als Alternative zu Interfaces verwendet werden

8

Was mir gesagt wurde, was meine Neugier auf dieses Thema entzündet hat:

  

Java-GUI-Klassen können Hunderte von Listeners und Callbacks implementieren und viele Bücher lehren Sie, alle diese Schnittstellen in Ihrer GUI-Klasse zu implementieren. Alternativ können diese Aspekte in inneren Klassen implementiert werden, so dass Methoden, die von diesen Listenern aufgerufen werden, nicht durcheinander geraten.

Ich würde gerne wissen, wie man das in ActionScript macht, das keine inneren Klassen, sondern private Klassen hat. Aber ich glaube nicht, dass mir klar ist, um was es bei den inneren Klassen geht, also versuche ich nur, mich mit der Situation zu befassen, in der ich sie verwenden würde, um die Methoden einer Klasse nach ihren Gebräuchen zu organisieren.

Bitte zeigen Sie ein Beispiel dafür, wie dies in ActionScript aussehen würde, wenn möglich, ansonsten Java.

    
Pup 25.05.2011, 15:06
quelle

2 Antworten

5

In Java sieht es so aus:

%Vor%

here ActionListener - ist eine Schnittstelle, und indem Sie new ActionListener() {/*interfaces method implementations goes here*/}; aufrufen, erstellen Sie eine anonyme Klasse (anonym, weil sie keinen Namen hat) - Implementierung dieser Schnittstelle.

Oder Sie können innere Klasse wie folgt machen:

%Vor%

und benutze es dann so:

%Vor%

Darüber hinaus können Sie Ihren Listener als eine oberste oder statische innere Klasse deklarieren. Die Verwendung der anonymen inneren Klasse ist jedoch manchmal sehr nützlich, da sie es Ihnen ermöglicht, Ihren Listener fast an der gleichen Stelle zu implementieren, an der die Komponente deklariert ist, welche Aktionen Ihr Listener ausführt. Offensichtlich wird es keine gute Idee sein, wenn der Code der Listener-Methode sehr lang ist. Dann wäre es besser, es in eine nicht anonyme innere oder statische geschachtelte oder oberste Klasse zu verschieben.

Im Allgemeinen sind innner-Klassen nicht statische Klassen, die sich irgendwie innerhalb des Hauptteils der obersten Klasse befinden. Hier können Sie Beispiele von ihnen in Java sehen:

%Vor%     
dhblah 25.05.2011, 15:20
quelle
2

Gasan gibt ein hervorragendes Beispiel dafür, wie innere Klassen typischerweise für Callbacks in Java-GUIs verwendet werden. Aber in AS3 würden Sie das normalerweise nicht so machen, weil AS3 Event Listener Funktionsreferenzen sind, keine Interfaces. In dieser Hinsicht hat AS3 mehr mit JavaScript als mit Java gemeinsam.

Was Sie in AS3 (genau wie bei JavaScript) anstelle der anonymen inneren Klassenrückrufe tun können, ist das Schließen von Funktionen.

EDIT: Ich habe hier eine Referenz gefunden, die mir viel Tipparbeit erspart:

ActionScript 3.0, das Schließungen für Ereignishandler verwendet

    
Adam Smith 25.05.2011 18:47
quelle