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.
Wie kann ich es realisieren, dass ich eine neue anonyme Klasse erstelle, die vom Typ "ArrayList" ist, intern eine Liste enthält und die Elemente dieser Liste dann umgekehrt zurückgibt?
Naja wenn ich iterator() oder listIterator() z. B. Aufrufe sind wir ja wieder beim alten Problem. Wenn dann muss ich die beiden auch überladen oder? Und außerdem gibst du auch kein Objekt zurück, sondern eine Zahl.
Najadoch... man könnte eine AbstractList erstellen, die die eigentliche List als delegate verwendet. Dann braucht man nur get zu implementieren (und set, add und remove NUR falls die Liste veränderbar sein soll, was wohl nicht empfehlenswert wäre...)
EDIT: Wobei dann ein überschreiben von get wie im letzten Post auch schon reichen sollte: Die Iteratoren verwenden ja nur diese Methode...
@Marco: meinst du etwa eine public Methode, die eine unmodifiable List invertiert zurückgibt?
Also sprich sowas:
Java:
private static final List<MyClass> myList;
public static final List<MyClass> getInvertedList() {
return new AbstractList<MyClass>(){
@Override
public Object get(int index) {
return myList.get( index );
}
@Override
public int size() {
return myList.size();
}
};
}
Ja, das würde in der Tat funktionieren.
Mal ne Frage dazu:
Könnte man irgendwo beim return-Statement angeben, dass es sich um eine Liste mit RandomAccess handelt?
Also von der Semantik her sowas wie
Code:
return new AbstractList<MyClass>() implements RandomAccess { ... };
Es würde ja höchstens sowas gehen:
Java:
public static final List<Object> getInvertedList() {
class MyList extends AbstractList<Object> implements RandomAccess {
@Override
public Object get(int index) {
return myList.get( index );
}
@Override
public int size() {
return myList.size();
}
}
return new MyList();
}
Soweit ich weiß führt da nichts an der Definition einer eigenen Klasse (wie im zweiten Codestück) vorbei.
Halb-OT: Irgendwann hatte ich auch mal angefangen, * ein paar Utility-Klassen zu schreiben, mit denen man "solche Sachen" machen kann. Also eine umgedrehte Liste, eine geshuffelte Liste, eine Liste, die automatisch "wrappt" (mit sowas wie get(index%size())), und natürlich eine CompundList, die eine kombinierte Ansicht für mehrere Listen ist... Aber da kann man (wie so oft) beliebig weit gehen. Die meisten dieser Listen kann man ganz abstrakt und allgemein zurückführen auf eine Kombination aus einer Liste und einem "IndexMapper", der einen Index (geschuffelt, ge%t, invertiert...) auf einen anderen abbildet... (nicht ganz so trivial, wie es im ersten Moment aussieht, aber von der Idee her)... naja, aber solange man keinen konkreten Anwendungsfall hat, wirkt das schon leicht akademisch....
* Bei dem "angefangen" habe ich mal in meinen "Develop"-Ordner geschaut: Es sind inzwischen ~100 Projekte, und wirklich aktiv gepflegt und/oder weiterentwickelt werden wohl weniger als 10
Er will (soweit ich das verstanden habe), dass die Liste intern nicht verändert wird, sondern dass man von außen (etwa durch eine get-Methode) die Liste umgekehrt erhält.