FraFu: Aus anonymer, innerer Klasse auf übergeordnete Instanz zugreifen

Hallo!
Ich bin mir nichtmal sicher, ob ich das Thema richtig gewählt habe. Aber hier die Problembeschreibung:

01: class MyApplet extends java.applet.Applet, Implements MyWatchDog {
02:   public void init(){
03:       ...
04:       icon.addMouseListener(new MouseAdapter() {
05:         public void mouseClick(MouseEvent e){
06:           MyObj obj=new MyObj(this.[instanz von MyApplet]);
07:         }
08:       }
09:   }
10:   public void MyWatchDogFunction(){
11:     ...
12:   }
13: }

Ich möchte in Zeile 06 dem Konstruktor von MyObj, die Instanz von MyApplet übergeben.
Konkret erwartet der Konstruktor von MyObj ein Objekt das das Interface MyWatchDog implementiert hat. MyApplet ist so ein Objekt und das möchte ich an MyObj übergeben. Geht das irgendwie?

mfg
  frafu

  1. Hallo!

    Ich habs jetzt mit eine lokalen Variable folgendermaßen gelöst:

    01: class MyApplet extends java.applet.Applet, Implements MyWatchDog {

    private MyWatchDog watchDog=this;
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

    02:   public void init(){
    03:       ...
    04:       icon.addMouseListener(new MouseAdapter() {
    05:         public void mouseClick(MouseEvent e){
    06:           MyObj obj=new MyObj(watchDog);

    ^^^^^^^^^

    07:         }
    08:       }
    09:   }
    10:   public void MyWatchDogFunction(){
    11:     ...
    12:   }
    13: }

    Könnte man das auch anders lösen?

    mfg
      frafu

    1. Hallo,

      Ich habs jetzt mit eine lokalen Variable folgendermaßen gelöst:

      01: class MyApplet extends java.applet.Applet, Implements MyWatchDog {

      Was bitte macht "Implements"? Nein, ich meine nicht "implements".

      private MyWatchDog watchDog=this;
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      Hm, im ersten Posting schriebst Du:

      Ich möchte in Zeile 06 dem Konstruktor von MyObj, die Instanz von MyApplet übergeben.
      Konkret erwartet der Konstruktor von MyObj ein Objekt das das Interface MyWatchDog implementiert hat. MyApplet ist so ein Objekt und das möchte ich an MyObj übergeben. Geht das irgendwie?

      Hier castest Du nun aber das Object MyApplet zu einem Interface MyWatchDog.

      Welchen Parameter erwartet Dein MyObj? Wie sieht der Construcktor aus?
      MyObj(MyWatchDog o)
      oder
      MyObj(Object o)

      Könnte man das auch anders lösen?

      So, wie Du es im ersten Posting beschrieben hast, wäre es

      06:           MyObj obj=new MyObj(this);

      viele Grüße

      Axel

      1. Hallo,

        So, wie Du es im ersten Posting beschrieben hast, wäre es
        06:           MyObj obj=new MyObj(this);

        Fürs Archiv:
        Nein, falsch, denn ich hatte die innere Klasse
        new MouseAdapter(){}
        übersehen.

        viele Grüße

        Axel

  2. hallo,

    06: MyObj obj=new MyObj(this.[instanz von MyApplet]);

    wenn ich dich richtig verstande habe dann probier es mal mit MyApplet.this

    mfg
    cwi

    1. moin cwi :)

      wenn ich dich richtig verstande habe dann probier es mal mit MyApplet.this

      ist myApplet denn static? (und überhaupt... was soll bitte ein this-Aufruf in einer statischen Klasse? "Ein bisschen Konsequenz beim prgrammieren bitte" *meinen Professor zitier*)

      liebe Grüße aus Berlin
      lina-

      --
      Self-Code: ie:% fl:( br:^ va:) ls:/ fo:| rl:( ss:) de:] js:| mo:)
      1. Hallo,

        wenn ich dich richtig verstande habe dann probier es mal mit MyApplet.this

        ist myApplet denn static?

        Wie kommst du jetzt auf "myApplet"? Er schrieb doch "MyApplet". Großer
        Unterschied.

        (und überhaupt... was soll bitte ein this-Aufruf in einer statischen Klasse?

        Ich sehe keine statische Klasse.

        "Ein bisschen Konsequenz beim prgrammieren bitte" *meinen Professor zitier*)

        Das, was cwi schrieb, war korrekt, sofern ich die Fragestellung richtig
        verstanden habe.

        Gruß
        Slyh

      2. Hallo!»» moin cwi :)

        wenn ich dich richtig verstande habe dann probier es mal mit MyApplet.this
        ist myApplet denn static? (und überhaupt... was soll bitte ein this-Aufruf in einer statischen Klasse? "Ein bisschen Konsequenz beim prgrammieren bitte" *meinen Professor zitier*)

        Scheint aber zu funktionieren! Kann das jemand erklären?

        mfg
          frafu

        1. Hallo,

          Scheint aber zu funktionieren! Kann das jemand erklären?

          http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#15.8.4

          viele Grüße

          Axel

          1. Hallo!»» Hallo,

            Scheint aber zu funktionieren! Kann das jemand erklären?
            http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#15.8.4

            Danke! Jetzt kann ich mich erinnern. Meine Java Zertifizierung ist ja doch schon ein paar Jahre her! :-)

            mfg
              frafu

          2. moin  :)

            http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#15.8.4

            das erklärt meinen Denkfehler... (mal vom Schreibfehler groß vs. klein abgesehen *G*)

            ich bin davon ausgegangen dass MyApplet.this ein Objekt von einer statischen Klasse anspricht...
            Danke Axel für die Weiterbildung! :)

            liebe Grüße aus Berlin
            lina-

            --
            Self-Code: ie:% fl:( br:^ va:) ls:/ fo:| rl:( ss:) de:] js:| mo:)