Anzeige:
Ergebnis 1 bis 6 von 6

Thema: Frage zu Listing 16.37 in "Java ist auch eine Insel"

  1. #1
    Registrierter Benutzer
    Registriert seit
    06.05.2007
    Beiträge
    58

    Frage zu Listing 16.37 in "Java ist auch eine Insel"

    Hallo liebes Java-Forum,

    ich arbeite mich gerade in die Java-Programmierung ein und vertiefe mich dazu in das Buch "Java ist auch eine Insel" von Christian Ullenboom. Dabei ist mir bei einem Listing etwas unklar und es wäre super, wenn es mir jemand erklären könnte. Scheinbar habe ich ein paar Punkte im Buch zu schnell gelesen...

    Ich beziehe mich konkret auf das Listing 16.37 (s . hier http://openbook.galileocomputing.de/...060e44a6013e7c). Was hier gemacht werden soll, ist mir klar, ich verstehe lediglich die zweite Box nicht. Wenn ich anstatt popmen.add(AbstractAction(s){... einfach popmen.add(s) hinschreibe, ist mir alles klar: er zerteilt den String und fügt diesen String-Array stückckenweise zum Popup-Menü dazu. Da ich dann bei Ausführung des Codes nicht durch Drücken im Popup-Menü den String zur Text-Area hinzufügen kann, ist auch klar, dass das in diesen Code-zeilen gemacht wird. Dafür ist wohl textArea.append zuständig. Aber was dazwischen passiert....keine Ahnung. Wo steht, dass das s überhaupt mal zum Popup-Menü hinzugefügt werden soll und was passiert dann? Und was soll die {-Klammer hinter new AbstractAction(s)? Zu was gehört die überhaupt? Ich kenne das Konstrukt schon gar nicht, da nach dem Aufruf eines Konstruktors scheinbar einfach eine geschweifte Klammer kommt.

    Wie ihr merkt, bin ich leicht verwirrt. Ich hoffe aber, mein Problem trotzdem verständlich ausgedrückt zu haben. Und hoffentlich kann mir jemand von euch helfen.,

    Grüße Christoph

  2. #2
    Registrierter Benutzer Avatar von mwanaheri
    Registriert seit
    28.10.2003
    Ort
    Bayreuth
    Beiträge
    569
    Was in der Zweiten Box passiert, ist, dass ein neuer Menüpunkt eingehängt wird und auch gleich definiert wird, was passieren soll, wenn der Menüpunkt angewählt wird. Das Einhängen eines Menüpunktes selbst hat ja noch nichts damit zu tun, dass auch definiert ist, was passieren soll, wenn der Menüpunkt angewählt wurde.
    Das Ziel ist das Ziel.

  3. #3
    Registrierter Benutzer
    Registriert seit
    06.05.2007
    Beiträge
    58
    Erstmal vielen Dank für die Antwort. Könntest du mir vielleicht noch ein bißchen mehr die Syntax erklären? Das grundsätzliche Vorgehen habe ich jetzt verstanden.

    Ich verstehe vor allem nicht die Zeile new AbstractAction(s) {...}. Was sollen die geschweiften Klammern? Verwendet man den new Operator nicht einfach zur Erzeugung neuer Objekte (Objekt obj = new Object(var[]); )?

    Wäre super, wenn du mir das noch erklären könntest.

    Grüße Christoph

  4. #4
    Registrierter Benutzer Avatar von mwanaheri
    Registriert seit
    28.10.2003
    Ort
    Bayreuth
    Beiträge
    569
    Der Haken bei AbstractAction ist, dass die Klasse abstrakt ist. Das heißt, dass nicht alle ihre Methoden auch in der Klasse ausmodelliert sind. Deshalb kann man keine Instanz dieser Klasse bilden, sondern muss eine andere Klasse von ihr ableiten, um damit arbeiten zu können. Diese Klasse muss dann alle Methoden implementieren, die in der abstrakten Klasse angemeldet, aber nicht implementiert sind.

    AbstractAction hat eine Methode angemeldet, die actionPerformed heißt. Diese Methode muss nun implementiert werden, damit die Action eben nicht mehr abstract ist. Das passiert in der geschweiften Klammer.Meistens steht da wirklich nur ein Aufruf drin, der eine Methode aufruft, die in der umgebenden Klasse definiert ist.
    Das Ziel ist das Ziel.

  5. #5
    Registrierter Benutzer
    Registriert seit
    06.05.2007
    Beiträge
    58
    Vielen, vielen Dank! Jetzt verstehe ich das.

    Grüße Christoph

  6. #6
    Registrierter Benutzer Avatar von panzi
    Registriert seit
    05.05.2001
    Ort
    Kottingbrunn
    Beiträge
    609
    Noch ein Hinweis: Das nennt sich dann anonyme Klassen und bewirkt das javac dann diese Foo$1.class Dateien anlegt. Auch kann man das eingeschränkt als Closure ansehn, zumal lokale Variablen des umgebenden Scops zugreifbar (lesbar) sind. Zumindest final "Variablen".
    Intel Core 2 Duo CPU 2.66GHz; Nvidia GeForce 8 8800 GTS; 4GB RAM; Fedora 12; KDE-testing

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •