У мене є метод інтерфейсу, який заявляє, що в документації він викине певний тип винятку. Реалізація цього методу використовує щось, що кидає виняток. Внутрішній виняток перехоплюється, а виняток, оголошений договором інтерфейсу, викидається. Ось невеликий приклад коду для кращого пояснення. Він написаний на 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, то він повинен кинути "a"file_not_found_exception. Винятки не повинні залежати від бібліотеки.