Досить дурне запитання. Даний код:
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)поганий дизайн. Я абсолютно згоден, але для тих, хто вважає, що оригінальна проблема просто не з’явилася б, якби ми мали гарний дизайн, ось додаткове запитання:
Визначення проблеми таке: у вас є джерело даних, де числа зберігаються як Strings. Це джерело може бути XML-файлом, веб-сторінкою, вікном робочого столу з 2 полями для редагування.
Ваша мета полягає в тому, щоб реалізувати логіку, яка приймає ці 2 Stringс, перетворює їх на ints і відображає вікно повідомлення "Сума xxx".
Незалежно від того, який підхід ви використовуєте для проектування / реалізації цього, ви будете мати ці 2 пункти внутрішньої функціональності :
- Місце , де ви перетворити
Stringвint - Місце, де ви додаєте 2
intс
Основне питання мого оригінального допису:
Integer.parseInt()очікує, що буде передано правильний рядок. Всякий раз, коли ви передаєте неправильний рядок , це означає, що ваша програма неправильна (а не " ваш користувач ідіот"). Вам потрібно реалізувати шматок коду там, де з одного боку ви маєте Integer.parseInt () із семантикою MUST, а з іншого боку, вам потрібно бути в порядку з випадками, коли введення неправильне - СЛІД семантики .
Отже, коротко: як мені реалізувати СЛІД семантику, якщо у мене є лише ОБОВ’ЯЗКОВІ бібліотеки .