2011-12-06 101 views
1

將字符串解析爲整數或雙精度時,錯誤格式將拋出NumberFormatException,但解析爲Date(例如)時將拋出ParseExceptionJava:爲什麼NumberFormatException不會擴展ParseException?

這兩個沒有根之前Exception,這引發了一個問題 - 爲什麼?

我想通過捕捉一個ParseException

+0

我不一定認爲有意識的決定不按照你的建議來設計它;它可能就是這樣。 –

+4

請注意,NumberFormat是RuntimeException,而ParseException不是。 –

+0

@ AndyThomas-Cramer - 這是一個重要的觀點。 NumberFormatException是否應該是一個未經檢查的異常是非常值得商榷的。 Gosling在Java編程語言_中編寫代碼:「未檢查的運行時異常表示一般情況下反映程序邏輯中的錯誤,並且在運行時無法合理恢復的條件。」很難看出解析用戶輸入產生的NumberFormatException在程序邏輯中是如何出錯的。 –

回答

2

數字格式例外很好地處理我的所有異常並不總是解析異常。

NumberFormat

「NumberFormat是所有數字格式的抽象基類,這個類提供了接口,用於格式化和分析數字。NumberFormat中還提供了確定的方法哪些語言環境,數字格式,以及他們的名字是。 「

這裏NumberFormatException

」 拋出,IND應用程序試圖將字符串轉換爲其中一種數字類型,但該字符串沒有適當的格式。 「

+1

「...字符串沒有適當的格式」聽起來像是一個解析問題。 –

+0

@TedHopp這不是一個解析問題。因此,在解析某些東西之前,必須對其進行格式化。 – Woot4Moo

+0

這沒有任何意義。解析_already_格式化的文本(只是格式不像數字)時拋出異常。 –

2

我懷疑NumberFormatException的和ParseException的不共享一個共同的祖先由於歷史原因,在任何情況下,如Java 7,你可以寫:

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

對於Java 6(或更早版本),如果你的錯誤處理代碼是相當大的,我建議把它放在一個錯誤處理方法,並從兩個catch子句中調用方法

0

如果你正在尋找不重複的代碼,然後只抓住NumberFormatException並拋出一個ParseException:

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

    …handle all in here 

} 
相關問題