Нет ничего плохого; на самом деле это обычно используемый шаблон.
Повторное исключение, обернутое в другое исключение, часто используется, когда контракт метода выдает исключение для конкретного домена, но существует конкретное исключение для реализации, к которому вы должны иметь дело, например SQLException.
public Customer getCustomer(int id) throws CustomerDataUnavailableException {
try {
// access SQL database
return customer;
} catch (SQLException e) {
throw new CustomerDataUnavailableException(e);
}
}
Выбор для хранения данных о клиентах в базе данных SQL является выбор реализации, которые вы не хотите, чтобы просочиться через API (бросая SQLException).
Он также упрощает изменение реализации, например, используя плоскую файловую систему на мобильном устройстве или используя NoSql db - изменение может быть внесено в метод без изменения какого-либо другого кода, поскольку контракт API является реализацией независимый.
Наконец, это облегчает тестирование и насмешку - вам не нужно бросать экзотические исключения, классы которых могут быть даже недоступны для вашего тестового кода.
Если это имеет смысл, это имеет смысл. В противном случае нет. –