2

假设我有一个方法或构造函数,它在内部使用另一个方法或构造函数,可以抛出 RuntimeException。

// Example:
public MyClass(Object arg) {
    setVar(arg);
    // Not responsible for dealing with the exception
}

public void setVar(Object arg) throws MyRuntimeException {
    if(!isValidArg(arg))
        throw new MyRuntimeException("Got you, evil argument!");
    // Do something
}

在这种情况下,如果未满足必要的先决条件,则会引发 RuntimeException。

问:包装方法/构造函数是否应该声明相同的异常,如果它的参数可能导致异常被抛出?

4

4 回答 4

3

这实际上取决于代码所在的上下文。如果你想制作一些自包含的东西,比如库,你可能想在类中捕获异常,只是为了让你的代码更干净。

但是,如果您将代码作为项目的一部分,那么正如您所说,我会“携带抛出异常”,直到它在语义上没有意义。

于 2013-03-08T12:41:14.837 回答
1

如果不应该在包装方法中处理它,我会声明它 - 与检查异常相同。

无论如何,即使对于未经检查的异常,也有这样的方法提示很好。客户将决定是否需要处理。

于 2013-03-08T12:44:16.517 回答
0

RuntimeExceptions被抛出而无需将其包含在这两种方法的 throws 签名中。

您应该阅读有关运行时异常的信息

于 2013-03-08T12:39:59.393 回答
0

不,不检查运行时异常,即编译器不会强迫您处理它们。但是作为一种良好的编程习惯,您可以处理异常,例如

public MyClass(Object arg) {
  try{
    setVar(arg);
}
catch(MyRuntimeException exp){
   // code if exception arises
}
于 2013-03-08T12:47:21.763 回答