2013-08-26 63 views
2

我看到NumberFormat有兩個方法很相似:爲什麼在NumberFormat中需要以下兩種方法?

1)

abstract Number  parse(String source, ParsePosition parsePosition) 

返回一個Long如果可能的話(例如,[Long.MIN_VALUE, Long.MAX_VALUE]的範圍內並沒有小數),否則一個雙。

2)從一個字符串

Object parseObject(String source, ParsePosition pos) 

解析文本以產生數。

parse(s,ParseIndex)的存在下,需要將parseObject(..)需要轉換爲所需輸出的需求是什麼? 我知道,第一種方法拋出ParseException和後者沒有。 只是想知道爲什麼需要這2種非常相似的方法。 在此先感謝。

回答

4

關於JDK最常聽到的投訴之一是爲什麼Integer.parseInt和類似的方法不能用於驗證字符串而不涉及昂貴的異常機制。 NumberFormat似乎已通過提供可通過返回null來表示失敗的方法來回答該投訴。

+0

有趣的是,子類DecimalFormat parse(String,ParsePosition)的相同方法不拋出ParseException。 – Rollerball

+0

+1一個很好的答案。雖然我個人沒有提出這個問題,但是你解釋這個問題的方式讓我覺得爲什麼「我」會使用它。 –

+0

@Rollerball請注意,'NumberFormat'類中都有'parse(String,ParsePosition)','parse(String)'和'parseObject(String,ParsePosition)'。那些接受'ParsePosition'的方法不會拋出,它們使用這個對象來表示解析錯誤的位置。 –

相關問題