Wie sollte die Iterator-Implementierung mit geprüften Ausnahmen umgehen?

8

Ich verpacke ein java.sql.RecordSet in einen java.util.Iterator. Meine Frage ist, was soll ich tun, falls eine Recordset-Methode eine SQLException auslöst?

Der java.util.Iterator javadoc erklärt was Ausnahmen, die in verschiedene Situationen geworfen werden (dh NoSuchElementException, falls Sie next () über das letzte Element hinaus aufrufen)

Es wird jedoch nicht erwähnt, was zu tun ist, wenn ein völlig unverwandtes Problem auftritt, das z. Netzwerk- oder Festplatten-IO-Probleme.

Das einfache Werfen von SQLException in next () und hasNext () ist nicht möglich, da es mit der Iterator-Schnittstelle inkompatibel ist.

Hier ist mein aktueller Code (vereinfacht):

%Vor%     
amarillion 27.02.2010, 10:21
quelle

1 Antwort

11

Ich würde die geprüfte Ausnahme in eine ungeprüfte Ausnahme schreiben, so dass sie ausgelöst werden kann, ohne Iterator zu zerstören.

Ich würde eine anwendungsspezifische Ausnahme vorschlagen, die RuntimeException erweitert und den Konstruktor (String, Throwable) implementiert, damit Sie den Zugriff auf die Ursache behalten können.

zB

%Vor%

Update: Um nach weiteren Informationen zu suchen, versuchen Sie Googlen 'checked unchecked java sqlexception'. Ziemlich ausführliche Erläuterung der Überprüfung der Ausnahmebehandlung in Bezug auf die Überprüfung und Nichtüberprüfung auf "Best Practices für die Ausnahmebehandlung" auf onjava.com und Diskussion mit verschiedenen Ansätzen auf IBM Developerworks .

    
Brabster 27.02.2010, 10:24
quelle