Довольно глупый вопрос.Учитывая код:
public static int sum(String a, String b) /* throws? WHAT? */ {
int x = Integer.parseInt(a); // throws NumberFormatException
int y = Integer.parseInt(b); // throws NumberFormatException
return x + y;
}
Не могли бы вы сказать, хорошо ли это Java или нет?То, о чем я говорю, это NumberFormatException
- непроверенное исключение.У вас нет , чтобы указать его как часть sum()
подписи.Более того, насколько я понимаю, идея непроверенных исключений состоит лишь в том, чтобы сигнализировать о том, что реализация программы неверна, и, более того, перехват непроверенных исключений является плохой идеей, поскольку это похоже на исправление плохой программы во время выполнения .
Кто-нибудь уточнит, пожалуйста:
- Я должен указать
NumberFormatException
как часть сигнатуры метода. - Я должен определить свое собственное проверенное исключение (
BadDataException
), обработайте NumberFormatException
внутри метода и перебросьте его как BadDataException
. - Я должен определить свое собственное проверенное исключение (
BadDataException
), проверить обе строки как-то как регулярные выражения и бросить мойBadDataException
если не совпадает. - Ваша идея?
Обновление :
Представьте, что это не открытый кодрамки, которые вы должны использовать по какой-то причине.Вы смотрите на подпись метода и думаете: «Хорошо, он никогда не бросает».Затем, однажды, вы получили исключение.Это нормально?
Обновление 2 :
В некоторых комментариях говорится, что мой sum(String, String)
плохой дизайн.Я абсолютно согласен, но для тех, кто считает, что оригинальная проблема никогда бы не появилась, если бы у нас был хороший дизайн, вот дополнительный вопрос:
Определение проблемы таково: у вас есть источник данных, где хранятся числакак String
с.Этот источник может быть файлом XML, веб-страницей, окном рабочего стола с 2 полями редактирования, чем угодно.
Ваша цель - реализовать логику, которая принимает эти 2 String
с, преобразует их в int
с и отображает окно с сообщением "сумма равна ххх".
Независимо от того, чтоподход, который вы используете для разработки / реализации этого, вы будете иметь эти 2 точки внутренней функциональности :
- Место, где вы конвертируете
String
в int
- Место, куда вы добавляете 2
int
s
Основной вопрос моего оригинального сообщения:
Integer.parseInt()
ожидает правильно строка для передачи.Всякий раз, когда вы передаете неверную строку , это означает, что ваша программа неверна (не " ваш пользователь идиот").Вам нужно реализовать фрагмент кода, где с одной стороны у вас есть Integer.parseInt () с MUST семантикой , а с другой стороны, вы должны быть в порядке со случаями, когда ввод неправильный - СЛЕДУЕТсемантика .
Итак, вкратце: как мне реализовать СЛЕДУЕТ семантике , если у меня только ДОЛЖНЫ библиотеки .