Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
zurzeit lerne ich für eine wichtige Nachschreibeklausur, und hänge bei einer Aufgabe fest, bei der ich einfach nicht weiterkomme:
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
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.
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.