对RuntimeExceptions进行抛出声明

时间:2013-03-08 12:36:49

标签: java exception defensive-programming

假设我有一个方法或构造函数在内部使用另一个方法或构造函数,声明可以抛出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。

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

4 个答案:

答案 0 :(得分:3)

这实际上取决于代码所在的上下文。如果你想创建一个自包含的东西,比如一个库,你可能想要在类中捕获Exception,只是为了使用你的代码更清洁

但是,如果你将代码作为项目的一部分,那么我会像你说的那样“承担抛出异常”,直到它在语义上没有意义。

答案 1 :(得分:1)

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

无论如何,即使对于未经检查的异常,也可以获得方法的提示。客户将决定是否需要处理。

答案 2 :(得分:0)

抛出

RuntimeExceptions而不需要将它包含在两个方法的throws签名中。

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

答案 3 :(得分:0)

不,不检查运行时异常,即编译器不会强制您处理它们。但作为一个好的编程实践,你可以处理像

这样的异常
public MyClass(Object arg) {
  try{
    setVar(arg);
}
catch(MyRuntimeException exp){
   // code if exception arises
}