Java: почему NumberFormatException не расширяет ParseException? - PullRequest
2 голосов
/ 06 декабря 2011

При разборе строки в целое или двойное число неправильный формат выдает NumberFormatException, но при разборе в Date (например) будет выброшено ParseException.

Эти дване иметь корня до Exception, что вызывает вопрос - почему?

Я хочу элегантно обработать все мои исключения, перехватив ParseException

Ответы [ 3 ]

2 голосов
/ 06 декабря 2011

Я подозреваю, что NumberFormatException и ParseException не имеют общего предка по историческим причинам.В любом случае, начиная с Java 7, вы можете написать:

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

Для Java 6 (или более ранней версии), если ваш код обработки ошибок достаточно велик, я предлагаю поместить его в метод обработки ошибок и вызватьметод из двух catch предложений.

2 голосов
/ 06 декабря 2011

Исключение формата чисел не всегда является исключением разбора.

NumberFormat

"NumberFormat - это абстрактный базовый класс для всех числовых форматов. Этот класс предоставляет интерфейс для форматирования и анализа чисел. NumberFormat также предоставляет методы для определения того, какие языковые стандарты имеют числовые форматы и как их называют."

А здесь NumberFormatException

"Брошено, чтобы указать, что приложение попыталось преобразовать строку в один из числовых типов, но строка не имеет соответствующего формата."

0 голосов
/ 06 декабря 2011

Если вы хотите не дублировать код, просто перехватите NumberFormatException и сгенерируйте ParseException:

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

    …handle all in here

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...