爲什麼拋出方法的一部分簽名。包含它似乎很奇怪。這是一個例子。爲什麼拋出方法簽名的一部分
@Overide
public void foo() {
throw new UnsupportedOperationException();
}
如果有誰在哪裏看到這個方法從他們可能會嘗試使用它,而不知道它是不支持外。他們只會在嘗試運行代碼時學習它。
但是,如果他們可以做這樣的事情,他們會通過查看它不被支持的方法知道,如果UnsupportedOperationException沒有擴展RuntimeException,他們會得到一個編譯錯誤。編輯1:但這是不可能的,因爲拋出是簽名的一部分,所以重寫將不起作用。
@Overide
public void foo() throws UnsupportedOperationException {
throw new UnsupportedOperationException();
}
這個問題涉及Java類的設計,所以我知道這可能是很難回答不上它的工作滴通過並回答它的人之一,但我希望,也許這問題已經被問到他們在此之前或者可能有明顯的理由通過這種方式來解釋原因。
你似乎在這裏回答你自己的問題?這是簽名,因爲你(和編譯器)知道代碼將拋出異常並且需要處理? – Erik
未檢查的異常及其引發的條件應記錄在javadoc中。這種範例被用在內置的Java庫中,並由多本書建議,例如,有效的Java來命名一個。 正如您正確指出的那樣,在簽名中聲明它們不是編譯器所要求的。 – Danstahr
你在質疑的是是否拋出一個未檢查的異常。爲了啓動你的方法,使用'@ Override'來表示它應該遵循契約(抽象或接口),但對於未經檢查的異常,你沒有義務這樣做。無論你是否選擇拋出它,總是按照@danstahr提到的良好實踐,將它添加到javadoc中。 –