Java:为什么NumberFormatException没有扩展ParseException?

时间:2011-12-06 15:29:23

标签: java exception exception-handling

将字符串解析为整数或双精度时,错误的格式将抛出NumberFormatException,但在解析为Date时(例如)将抛出ParseException

这两个在Exception之前没有根,这引出了一个问题 - 为什么?

我希望通过捕获ParseException

来优雅地处理所有异常

3 个答案:

答案 0 :(得分:2)

数字格式异常并不总是解析异常。

NumberFormat

  

“NumberFormat是所有数字格式的抽象基类。此类提供格式化和解析数字的接口.QuadFormat还提供了确定哪些语言环境具有数字格式以及它们名称是什么的方法。”

这里NumberFormatException

  

“抛出以指示应用程序已尝试将字符串转换为其中一种数字类型,但该字符串没有适当的格式。”

答案 1 :(得分:2)

我怀疑NumberFormatException和ParseException由于历史原因不共享共同的祖先。无论如何,从Java 7开始,您可以写:

try {
    . . .
} catch (ParseException|NumberFormatException ex) {
    // elegant handling goes here
}

对于Java 6(或更早版本),如果您的错误处理代码相当大,我建议将其放入错误处理方法并从两个catch子句中调用该方法。

答案 2 :(得分:0)

如果您希望不重复代码,那么只需捕获NumberFormatException并抛出ParseException:

try {
    try {
        …parsing
    } catch (NumberFormatException x1) {
        throw new ParseException("",0);
    }
} catch (ParseException x2) {

    …handle all in here

}