У меня есть метод интерфейса, который утверждает, что в документации он будет генерировать исключение определенного типа. Реализация этого метода использует что-то, что вызывает исключение. Внутреннее исключение перехвачено, и исключение объявлено контрактом интерфейса. Вот небольшой пример кода, чтобы лучше объяснить. Он написан на PHP, но за ним довольно просто следовать.
// in the interface
/**
* @return This method returns a doohickey to use when you need to foo
* @throws DoohickeyDisasterException
*/
public function getThatDoohickey();
// in the implementation
public function getThatDoohickey() {
try {
$SomethingInTheClass->doSomethingThatThrowsAnException();
} catch (Exception $Exc) {
throw new DoohickeyDisasterException('Message about doohickey failure');
}
// other code may return the doohickey
}
Я использую этот метод, чтобы предотвратить утечку абстракции.
Мои вопросы: будет ли пропускать выброшенное внутреннее исключение как предыдущее исключение утечки абстракции? Если нет, было бы целесообразно просто повторно использовать сообщение предыдущего исключения? Если это будет утечка абстракции, не могли бы вы дать некоторые рекомендации о том, почему вы думаете, что это происходит?
Просто чтобы уточнить, мой вопрос будет включать в себя следующую строку кода
throw new DoohickeyDisasterException($Exc->getMessage(), null, $Exc);
file_not_found
, то он должен броситьfile_not_found_exception
. Исключения не должны быть специфичными для библиотеки.