Klassen Anonyme innere Klasse

bZerk

Neues Mitglied
Hallo zusammen,

zurzeit lerne ich für eine wichtige Nachschreibeklausur, und hänge bei einer Aufgabe fest, bei der ich einfach nicht weiterkomme:

Aufgabe.jpg

Ich weiß, dass anonyme Klassen beim Initialisieren gleichzeitig definiert werden. Jetzt mein Problem: die Methode enumerate() soll ein Objekt dieser anonymen inneren Klasse returnen. Den Rückgabewert der Methode kann ich aber nicht entsprechend setzen, da die Klasse ja erst im Folgenden definiert wird.

Weiterhin weiß ich nicht, wie ich die innere Klasse java.util.Enumeration implementieren lassen soll 😕

Über Hinweise oder Beispiele wäre ich sehr dankbar 🙂
 
Naja, die Methode hat auf jedenfall den Rumpf:
Java:
public Enumeration enumerate() {
  //...
}
Die Eigenschaft einer inneren anonymen Klasse ist, dass diese so instanziert wird:
Java:
new Enumeration() {
  // Methods to implement
}
Eine Enumeration kann dir sagen, ob in der Aufzählung der Elemente noch welche vorhanden sind (hasMoreElements). Dafür braucht sie eine Zustandsvariable um die aktuelle Position anzuzeigen. Mit dieser kannst du dann das nächste Element aus der Aufzählung zurückliefen.

Noch etwas unklar?
 
Vielen Dank für die schnelle Antwort. Dass der Rückgabewert ein Objekt von Enumeration sein soll war mir nicht klar. Ich ging davon aus man solle eine neue Klasse erstellen, welche Enumeration implementiert.

Das macht vieles einfacher 🙂 Habe jetzt folgendes:

Java:
    public Enumeration enumerate() {
        return new Enumeration() {
           
            public boolean hasMoreElements() {
                return nextElement() != null;
            }

            public Object nextElement() {
                return contents[++count];
            }   
        };
    }
 
Das geht schon in die richtige Richtung. Du solltest hier aber nicht den count-Zähler der Collection-Klasse verwenden (und verändern (!), das ist hier das fatale), sondern innerhalb der anonymen inneren Klasse eine eigene Zählvariable definieren.
 
"...Dass der Rückgabewert ein Objekt von Enumeration sein soll war mir nicht klar. Ich ging davon aus man solle eine neue Klasse erstellen, welche Enumeration implementiert."

Deine erste Annahme war vollkommen richtig.
Im Grunde macht
Code:
new Enumeration() {...}
genau das.
Der Compiler erstellt hierfür eine neue anonyme Klasse, welche Enumeration implementiert.
Das Objekt des Rückgabewerts kann als Enumeration angesprochen werden.

Hier ein Beispiel ohne anonyme Klasse:
Anm: JFrame implementiert Accessible.
Wenn du
Code:
Accessible aObject = new JFrame();
schreibst,
dann beinhaltet die Variable ein JFrame, das im Folgenden aber (wahrscheinlich) als Accessible behandelt wird.
 

Neue Themen


Zurück
Oben