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