接口的方法应该抛出异常吗?

时间:2010-12-31 11:44:36

标签: java exception interface

我的意思是,在定义中。如果我有一个实现接口的类的方法,并且我想抛出一个异常,如果接口没有throws声明,我怎么能这样做。

由于

4 个答案:

答案 0 :(得分:5)

你根本就没有或抛出RuntimeException。

答案 1 :(得分:5)

依赖于实现接口的类的代码如何知道它必须处理新的异常?您有两种选择:

  1. 在界面方法中处理它。
  2. 抛出一个继承自RuntimeException的异常,该异常不需要在throws子句中。但是,调用此方法的任何代码都不必捕获此异常,也不知道它可以被抛出。因此使用此选项时要小心。尽可能记录它们,但在将对象传递给现有方法(如库或内置方法)时仍然会遇到问题。

答案 2 :(得分:3)

如果您无法触摸界面,那么您唯一的选择是抛出RuntimeException。您可以直接使用一些标准的RuntimeExceptions:IllegalStateExceptionIllegalArgumentExceptionUsupportedOperationException等。

如果符合您的需要,请使用这些标准例外,或者通过扩展班级RuntimeException来创建您自己的例外。考虑使用javadoc中的@throws doclet来记录抛出的异常。

答案 3 :(得分:3)

只有当所有可能的实现都强制客户端处理该异常时,接口中的方法才能声明抛出已检查的异常。 想想java.sql.Connection(一个带有抛出SQLException的所有方法的接口)。否则,如果只有一个特定的实现必须处理一些已检查的异常,那么在那里处理它并将其包装在一些RuntimeException中,如果有意义的话,重新抛出或从该状态恢复。