Как часть написания Iterator, я обнаружил, что пишу следующий фрагмент кода (обработка ошибок)
public T next() {
try {
return next;
} finally {
next = fetcher.fetchNext(next);
}
}
немного легче читать, чем
public T next() {
T tmp = next;
next = fetcher.fetchNext(next);
return tmp;
}
Я знаю, что это простой пример, где разница в удобочитаемости может быть не такой значительной, но меня интересует общее мнение о том, не стоит ли использовать try-finally в таких случаях, когда нет исключений, или если это на самом деле предпочтительнее, когда это упрощает код.
Если это плохо: почему? Стиль, производительность, подводные камни, ...?
Заключение Спасибо вам за все ваши ответы! Я думаю, что вывод (по крайней мере для меня) заключается в том, что первый пример мог бы быть более читабельным, если бы это был общий шаблон, но это не так. Поэтому путаница, вызванная использованием конструкции вне ее предназначения, наряду с, возможно, запутанным потоком исключений, перевесит любые упрощения.
Iterator
, где для работы вам действительно нужна какая-то предварительная выборка hasNext()
. Попробуй сам.
Iterator
заключается в том, что вам нужно получить значение в hasNext()
(потому что выборка довольно часто - единственный способ выяснить, существует ли оно) и вернуть его так next()
же, как это сделал OP.
finally
блоки.