【问题标题】:Should I declare an unchecked exception?我应该声明一个未经检查的异常吗?
【发布时间】:2016-05-29 07:20:45
【问题描述】:

我有一个方法可以像这样调用另一个方法:

public void m1() {
    m2(10);
}

public void m2(int v) {
    if(v < 10)
        throw new MyException();
}

public class MyException extends RuntimeException{ }

现在,我想通知将要使用 m1() 的客户它可能会抛出 MyException。我这样声明可以吗:

public void m1() throws MyException{
    m2(10);
}

我不确定,因为我曾经使用带有检查异常的throws 声明。对未检查的人这样做很常见吗?

【问题讨论】:

    标签: java exception unchecked-exception


    【解决方案1】:

    可以这样做 - 我相信它会出现在 Javadoc 中。但它不会强迫任何调用者处理异常,因此您基本上仍然依赖用户(调用您的代码的开发人员)足够勤奋地检查文档。如果这对您来说已经足够了,那就去吧 - 否则,将 MyException 更改为已检查异常。

    至于声明可能抛出的未经检查的异常是否常见 - 我想说我已经经常看到它不会特别令人惊讶,但这不是一种广泛使用的做法.

    【讨论】:

      【解决方案2】:

      您可以在throws 子句中声明未经检查的异常,但是,正如您所指出的,它不会产生任何实际影响,除了表示该方法可能会抛出它。这样做肯定并不少见,JDK 似乎采用了这种方法(例如,参见 Integer#parseInt)。

      无论您是否在throws 子句中声明它,您都应该在方法的javadoc 中记录它,这是使用您的方法的人可能首先看到的地方。

      【讨论】:

      • JDK中有反例,比如ArrayList#get没有IndexOutOfBoundsException的throws子句。
      猜你喜欢
      • 2014-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-02
      相关资源
      最近更新 更多