我有一个接口方法,在文档中指出它将抛出特定类型的异常。该方法的实现使用引发异常的东西。捕获内部异常,并抛出接口协定声明的异常。这是一个可以更好解释的代码示例。它是用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
。异常应该不会是图书馆具体。