簡體   English   中英

接口的方法應該拋出異常嗎?

[英]Should the methods of the interfaces throw exceptions?

我的意思是,在定義中。 如果我有一個實現接口的類的方法,並且我想拋出異常,如果接口沒有throws聲明,我怎么能這樣做。

謝謝

你根本就沒有或拋出RuntimeException。

依賴於實現接口的類的代碼如何知道它必須處理新的異常? 您有兩種選擇:

  1. 在界面方法中處理它。
  2. 拋出從RuntimeException繼承的異常,該異常不需要在throws子句中。 但是,調用此方法的任何代碼都不必捕獲此異常,也不知道它可以被拋出。 因此使用此選項時要小心。 盡可能記錄它們,但在將對象傳遞給現有方法(如庫或內置方法)時仍然會遇到問題。

如果您無法觸摸界面,那么您唯一的選擇是拋出RuntimeException 您可以直接使用一些標准的RuntimeExceptions: IllegalStateExceptionIllegalArgumentExceptionUsupportedOperationException等。

如果它們符合您的需要,請使用這些標准異常,或者通過擴展RuntimeException類來創建自己的異常。 考慮使用javadoc中的@throws doclet來記錄拋出的異常。

只有當所有可能的實現都強制客戶端處理該異常時,接口中的方法才能聲明拋出已檢查的異常。 想想java.sql.Connection(一個帶有拋出SQLException的所有方法的接口)。 否則,如果只有一個特定的實現必須處理一些已檢查的異常,請在那里處理它並將其包裝在某些RuntimeException中,如果有意義則重新拋出或從該狀態恢復。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM