將字符串解析爲整數或雙精度時,錯誤格式將拋出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在程序邏輯中是如何出錯的。 –