如果你有一個接口,並且你不知道它的方法將如何實現(即它是一個其他用戶將會擴展的庫),你怎麼知道該方法的實現是否會出現異常?你應該在每個接口方法上聲明「throws Exception」,因爲你不知道實現嗎?總是在接口方法中聲明「拋出異常」?
例如,我正在創建一個http客戶端。該庫具有Request
接口,它表示一個http請求字符串:
public interface Request
{
String asString(); // no "throws" here
}
public final class AssembledRequest implements Request
{
// ...
public AssembledRequest(Method method, Url url, Headers headers, Body body) {
// ...
}
public String asString() {
// ...
}
}
它也有一個Response
類,它使用此Request
接口。 我自己的實現(AssembledRequest
)不會拋出異常,它只是組裝一堆字符串,可能大多數實現不會拋出任何東西。
但是如果用戶想要以asString
從文件讀取的方式實現Request
會怎麼樣?然後我們正在處理IOExcepton
,用戶很難處理這種例外情況。沒有throws...
聲明,所以你必須在方法內部處理它,這是一個不錯的方法,因爲你想抓住它並重新拋出,所以它會冒泡到你的應用程序的頂部,然後被處理。
如果Request
接口在asString
上聲明瞭throws Exception
,它會容易得多。這使我得出結論,對於庫,所有接口的方法應該有throws Exception
。我對嗎?
您應該知道這些方法是否有可能拋出異常。如果你不想拋出異常,那麼如果它們容易出現異常,你將不得不在實現它的方法中嘗試catch。 –
向接口方法中添加'throws Exception',因爲有一天,也許,也許,也許,有人可能需要它是最糟糕的一種YAGNI(你不會需要它)。你讓所有後代永遠支付。不是一個好計劃。 –
@BobDalgleish當'asString'從文件讀取時,你會如何解決我的問題? –