В общем, у меня были дни, потраченные людьми, выбрасывающими подобные исключения.
Я рекомендую следующие несколько основных правил с исключениями:
Если вы абсолютно уверены, что вы никогда не будет вызывать проблемы с проверяемого исключения, поймать именно это исключение и комментарии, почему именно вам не нужно, чтобы справиться с этим , (Sleep выбрасывает InterruptedException, которое всегда можно игнорировать, если вы на самом деле его не интересуете, но, честно говоря, это единственный случай, который я обычно игнорирую - даже при этом, если вы его никогда не получите, какова стоимость его регистрации?)
Если вы не уверены, но вы можете получить его изредка, поймайте и зарегистрируйте трассировку стека только так, чтобы при возникновении проблемы ее можно было найти. Опять же, поймайте только то исключение, которое вам нужно.
Если вы не видите, как может быть выбрано исключенное исключение, поймайте его и перебросите его как исключенное исключение.
Если вы точно знаете, что вызывает исключение, поймите его и зарегистрируйте, почему именно вам не нужна трассировка стека в этом случае, если вы очень четко знаете, что вызывает его (и вы можете упомянуть класс это регистрирует его, если вы еще не используете log4j или что-то.
Похоже, ваша проблема попадет в последнюю категорию, и для такого рода улов никогда не делайте то, что вы написали (Исключение e), всегда делайте конкретное исключение только в случае броска какого-либо непроверенного исключения (плохие параметры, нулевой указатель, ...)
Обновление: Основная проблема здесь в том, что Checked Exce ptions непродуктивны. Единственный язык, в котором они существуют, - это Java. Они теоретичны, но в действии они вызывают такое поведение уловки и скрыть, что вы не получаете с непроверенными исключениями.
Многие люди прокомментировали тот факт, что я сказал, что скрыть их иногда бывает хорошо.Чтобы быть конкретными, один случай, я могу думать:
try {
Thread.sleep(1000);
catch (InterruptedException e) {
// I really don't care if this sleep is interrupted!
}
Я полагаю, что основная причина, я считаю, что использование в порядке, потому что это использование InterruptedException является злоупотреблением проверенного шаблона исключения, в первую очередь, это сообщение результата сна больше, чем указание условия исключения.
Он сделал бы гораздо больше смысла иметь:
boolean interrupted=Thread.sleep(1000);
Но они очень гордятся своей новой модели проверили исключения, когда они впервые создали Java (понятно, что это очень аккуратным в концепции - только не на практике)
Я не могу представить себе другой случай, когда это приемлемо, поэтому, возможно, я должен был бы указать это как один из случаев, когда может быть допустимым игнорировать исключение.
Я всегда просто игнорировал их, видя, как я обычно делаю это с базой данных на этом этапе. – Powerlord 2008-10-29 19:45:32
Пустые блоки блокировки являются злыми. Как достойный стрельбы. И, стреляя, я имею в виду гореть на костре. Даже простого оператора журнала было бы достаточно, люди! – erickson 2008-10-29 19:55:08
Те, у кого есть пустые заявления на уловки «добровольцы», автоматически входят в список, чтобы позвонить, когда возникают проблемы с производством в 3 часа ночи. – 2010-04-04 09:55:26