Beim Schreiben eines Iterators habe ich festgestellt, dass ich den folgenden Code geschrieben habe (Fehlerbehandlung beim Entfernen).
public T next() {
try {
return next;
} finally {
next = fetcher.fetchNext(next);
}
}
finde es etwas leichter zu lesen als
public T next() {
T tmp = next;
next = fetcher.fetchNext(next);
return tmp;
}
Ich weiß, es ist ein einfaches Beispiel, bei dem der Unterschied in der Lesbarkeit vielleicht nicht so überwältigend ist, aber ich bin an der allgemeinen Meinung interessiert, ob es schlecht ist, try-finally in Fällen wie diesem zu verwenden, in denen es keine Ausnahmen gibt, oder wenn es tatsächlich bevorzugt wird, wenn es den Code vereinfacht.
Wenn es schlecht ist: warum? Stil, Leistung, Fallstricke, ...?
Fazit Vielen Dank für all Ihre Antworten! Ich denke, die Schlussfolgerung (zumindest für mich) ist, dass das erste Beispiel besser lesbar gewesen wäre, wenn es ein allgemeines Muster gewesen wäre, aber das ist es nicht. Daher überwiegt die Verwirrung, die durch die Verwendung eines Konstrukts außerhalb seines Verwendungszwecks zusammen mit einem möglicherweise verschleierten Ausnahmefluss entsteht, jegliche Vereinfachungen.
Iterator
, bei der Sie tatsächlich eine Art Vorablesezugriff benötigen, um hasNext()
arbeiten zu können. Versuch es selber.
Iterator
ist, dass Sie den Wert in abrufen müssen hasNext()
(weil das Abrufen des Werts oft die einzige Möglichkeit ist, herauszufinden, ob er vorhanden ist) und ihn next()
wie im OP zurückgeben müssen.
finally
Blöcke.