Iteratoren oder Listen für Rückgabewerte in Java

Listing B zeigt im Prinzip dieselbe Methode, aber diesmal mit einem Iterator als Rückgabewert. Auf den ersten Blick sieht das Ganze etwas komplizierter aus. Hier wird eine anonyme Inner Class verwendet, die einige Entwickler vielleicht etwas verwirren mag. Aber ansonsten ist alles recht durchsichtig. Wichtig zu beachten ist, dass keine Ergebnisse aus dem ResultSet entfernt werden, bevor der Iterator zurückgegeben wurde. Dabei kann der Iterator durchaus schon zurückgegeben werden, bevor das ResultSet vollständig gefüllt ist. Diesen Prozess kann man sogar noch weiter beschleunigen, indem man die Erstellung des ResultSet in die hasNext-Methode des Iterators verlegt, so dass das ResultSet erst erstellt wird, wenn hasNext das erste Mal aufgerufen worden ist.

Ebenfalls wichtig ist, dass die next-Methode des Iterators die hasNext-Methode intern aufruft, so dass wir sicherstellen können, dass die next-Methode von ResultSet aufgerufen wird, bevor der erste Aufruf der getString-Methode erfolgt – so wie es das ResultSet-API verlangt. Außerdem sorgen die private Variable next im Iterator und die damit verbundene Prüfung zu Beginn der hasNext-Methode dafür, dass die wiederholten Aufrufe von hasNext zwischen den Aufrufen der next-Methode gewährleistet sind – wie es das Iterator-API erfordert.

Ich habe absichtlich jegliche Synchronisierung weggelassen, da ich wie die Autoren des Java Collections API der Meinung bin, dass es oft effizienter ist, den Nutzer des Iterators für die Synchronisierung sorgen zu lassen, falls er es für notwendig hält. Wenn Sie allerdings diesen Iterator Thread-sicher machen wollten, müssten Sie nur die Methoden hasNext und next synchronisieren.

Themenseiten: Anwendungsentwicklung, Software

Fanden Sie diesen Artikel nützlich?
Content Loading ...
Whitepaper

Artikel empfehlen:

Neueste Kommentare 

Noch keine Kommentare zu Iteratoren oder Listen für Rückgabewerte in Java

Kommentar hinzufügen

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *