Пустые catch блоки это плохо? Вот упрощенный вариант того, как я использую Try-Catchclass Database {
public void addRow() throws SQLException {
try { /* Add row */ }
catch(SQLException e) {
log.error(e);
throw e;
}
}
}
class Context1 {
public void doSomething(Database db) throws SQLException {
db.addRow(); //If throws exception then main exception handler executes sendMessage("failed");
sendMessage("success");
}
}
class Context2 {
public void doSomething(Database db) {
try { db.addRow(); }
catch (SQLException ignored) {}
}
}
Мне хотелось бы исключить перевыбрасывания исключений, дабы избежать пустые catch блоки во второй ситуации, когда уведомлять нигде, кроме консоли не нужно, но тогда становится невозможным обработка первой ситуации, когда необходимо уведомить пользователя о невыполненной операции.
Как быть в такой ситуации?

21 Авг 2019 в 07:08
196 +1
0
Ответы
1

Если вам необходимо обработать исключение в первой ситуации, но при этом избежать пустых catch блоков во второй ситуации, можно использовать такой подход:

В классе Database измените метод addRow() так, чтобы он не перевыбрасывал исключение SQLException, а вместо этого возвращал boolean значение в зависимости от успешности операции:class Database {
public boolean addRow() {
try {
/* Add row */
return true;
}
catch (SQLException e) {
log.error(e);
return false;
}
}
}В классах Context1 и Context2 проверяйте результат выполнения метода addRow() и уже там принимайте решение об уведомлении пользователя:class Context1 {
public void doSomething(Database db) {
if(db.addRow()) {
sendMessage("success");
} else {
sendMessage("failed");
}
}
}
class Context2 {
public void doSomething(Database db) {
db.addRow(); // не надо перехватывать SQLException
// дальнейшие действия в зависимости от результата можно реализовать здесь
}
}

Таким образом, вы избежите пустых catch блоков второй ситуации, а также сможете обрабатывать исключения и уведомлять пользователя в первой ситуации.

20 Апр в 13:06
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 493 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир