将字符串解析为整数或双精度时,错误格式将抛出NumberFormatException
,但解析为Date
(例如)时将抛出ParseException
。Java:为什么NumberFormatException不会扩展ParseException?
这两个没有根之前Exception
,这引发了一个问题 - 为什么?
我想通过捕捉一个ParseException
将字符串解析为整数或双精度时,错误格式将抛出NumberFormatException
,但解析为Date
(例如)时将抛出ParseException
。Java:为什么NumberFormatException不会扩展ParseException?
这两个没有根之前Exception
,这引发了一个问题 - 为什么?
我想通过捕捉一个ParseException
数字格式例外很好地处理我的所有异常并不总是解析异常。
“NumberFormat是所有数字格式的抽象基类,这个类提供了接口,用于格式化和分析数字。NumberFormat中还提供了确定的方法哪些语言环境,数字格式,以及他们的名字是。 “
” 抛出,IND应用程序试图将字符串转换为其中一种数字类型,但该字符串没有适当的格式。 “
“...字符串没有适当的格式”听起来像是一个解析问题。 –
@TedHopp这不是一个解析问题。因此,在解析某些东西之前,必须对其进行格式化。 – Woot4Moo
这没有任何意义。解析_already_格式化的文本(只是格式不像数字)时抛出异常。 –
我怀疑NumberFormatException的和ParseException的不共享一个共同的祖先由于历史原因,在任何情况下,如Java 7,你可以写:
try {
. . .
} catch (ParseException|NumberFormatException ex) {
// elegant handling goes here
}
对于Java 6(或更早版本),如果你的错误处理代码是相当大的,我建议把它放在一个错误处理方法,并从两个catch
子句中调用方法
如果你正在寻找不重复的代码,然后只抓住NumberFormatException并抛出一个ParseException:
try {
try {
…parsing
} catch (NumberFormatException x1) {
throw new ParseException("",0);
}
} catch (ParseException x2) {
…handle all in here
}
我不一定认为有意识的决定不按照你的建议来设计它;它可能就是这样。 –
请注意,NumberFormat是RuntimeException,而ParseException不是。 –
@ AndyThomas-Cramer - 这是一个重要的观点。 NumberFormatException是否应该是一个未经检查的异常是非常值得商榷的。 Gosling在Java编程语言_中编写代码:“未检查的运行时异常表示一般情况下反映程序逻辑中的错误,并且在运行时无法合理恢复的条件。”很难看出解析用户输入产生的NumberFormatException在程序逻辑中是如何出错的。 –