Довольно глупый вопрос. Учитывая код:
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
s. Этим источником может быть XML-файл, веб-страница, окно рабочего стола с двумя полями редактирования, что угодно.
Ваша цель - реализовать логику, которая берет эти 2 String
секунды, преобразует их в int
s и отображает окно сообщения с сообщением «сумма равна xxx».
Независимо от того, какой подход вы используете для разработки / реализации этого, у вас будут две точки внутренней функциональности :
- Место, где вы конвертируетесь
String
вint
- Место, где вы добавляете 2
int
с
Основной вопрос моего исходного сообщения:
Integer.parseInt()
ожидает передачи правильной строки. Всякий раз, когда вы передаете неверную строку , это означает, что ваша программа неверна (а не « ваш пользователь идиот»). Вам необходимо реализовать фрагмент кода, в котором, с одной стороны, у вас есть Integer.parseInt () с ОБЯЗАТЕЛЬНОЙ семантикой, а с другой стороны, вам нужно быть в порядке со случаями, когда ввод неверен - семантика ДОЛЖНА .
Итак, вкратце: как мне реализовать семантику СЛЕДУЕТ, если у меня есть только ОБЯЗАТЕЛЬНЫЕ библиотеки .