Чому в підручнику Oracle Java перевіряються порівняно з неперевіреними винятками, які називаються «суперечками»?


10

Я новачок у Java і читав її документацію за винятками. , і особливо Неперевірені винятки - Сторінка суперечки .

Суть говорить:

Якщо від клієнта обґрунтовано можна очікувати, що відновиться після винятку, зробіть це перевіреним винятком. Якщо клієнт не може нічого зробити, щоб відновити виняток, зробіть це неперевіреним винятком.

Я не розумію статті. Про що «суперечка» йдеться? Чи можете ви пояснити це простими словами?




Прошу побачити оновлене питання, я не вважаю, що це дублікат :)
ABcDexter

3
"Я спробував це прочитати", - що сталося?
Марно

2
Це називається так, тому що навколо цієї теми існує багато суперечок. Дивіться також це питання StackOverflow: Справа проти перевірених винятків, де згадується кілька цитат відомих / впливових людей
Халк

Відповіді:


3

Я наведу вам перший приклад (але в самому кінці - це відповідь, чому суперечка).

Скажімо, ви редагуєте документ у редакторі документів на базі Java, і після завершення вибираєте Файл-> Зберегти як ... і ви вирішили зберегти документ у томі, на який у вас немає дозволу на запис. Редактор не навалиться на вас з некрасивою стеклом, він просто скаже вам, що він не може зберегти файл, і дозволить вам продовжувати редагування та / або збереження в інше місце.

У такому випадку, ймовірно, очікували перевіреного винятку, його спіймали та діяли, щоб милостиво відновитись із нього.

З іншого боку, замініть ці розділення на нуль або виняток з нульовим вказівником, викликане помилкою програмування, яка одержує свою потворну голову лише в певних умовах. Це може статися в будь-якому місці коду, оперативна пам’ять може бути пошкоджена і т. Д. Жоден API API не скаже вам, що "цей метод кине поділ на нуль, якщо оперативна пам'ять пошкоджена" .

Перевірені винятки повинні бути частиною дизайну, і користувачі цього API повинні готуватися з ними. Неперевірені винятки можуть траплятися майже скрізь і поза нашим контролем.

Суперечка виникає у програмістів, що використовують неперевірені винятки (що поширюються на RuntimeException), коли вони повинні використовувати перевірені винятки:

  • як ярлик, щоб не турбувати компілятор
  • щоб їх підписи виглядали простішими
  • оскільки вони вважають, що перевірені винятки є проблемою залежності (якщо ви кинете новий перевірений виняток у клас реалізації, слід змінити підпис інтерфейсу) та viceversa.

"ви повинні змінити підпис інтерфейсу" - ну, ви навіть змушені робити це компілятором, і вам доведеться обробляти або оголошувати його кинутим на кожному сайті виклику.
Халк

3
Чи належним чином програма UI обробляє помилку зручним для користувача способом, залежить від того, наскільки програміст написав код. Вони можуть так само добре писати код за допомогою неперевірених винятків, так само як хтось інший може неправильно обробляти помилки з перевіреними винятками. Намір перевіряються винятків , щоб зробити його простіше для програмістів , щоб правильно обробляти помилки. Суперечка полягає не в тому, про що ви тут заявляли, а в тому, чи дійсно вони успішно виконують цю мету - спростити обробку помилок. На думку багатьох, їх немає; вони ускладнюють.
Сервіс

@Servy Яким зручним для користувачів способом може користувальницький інтерфейс вирішити факт несправності чіпа оперативної пам'яті або не мати циклів процесора, оскільки інше програмне забезпечення не працює?
Tulains Córdova

1
@ TulainsCórdova У будь-якому з цих випадків програма навіть не запускається , тому не існує виключення, що обробляється період , тому те, як ви намагаєтеся представити помилку, не має значення, коли ви не в змозі навіть запустити будь-який із ваших код, коли це відбувається.
Сервіс

1
@ TulainsCórdova Вам не обов’язково виникати помилка, щоб обробити її, але так, компілятор не скаже вам, що її можна кинути. Суперечка полягає в тому, чи дійсно корисний компілятор, який говорить вам про те, що виняток може бути кинутий. Деякі думають, що це так, деякі вважають, що це не так. Питання тут полягає в тому, що таке суперечка , і це відповідь. Ваше твердження про те, що суперечка перевірених винятків - це не це.
Сервіс

-4

На цій сторінці суперечок немає. Це Oracle говорить людям використовувати перевірені винятки.

Підроблена «суперечка», яку вони винайшли тут, є між мовними дизайнерами та мовними користувачами. Дизайнери дозволили людям кидати і ловити речі, які (на їхню думку) не повинні бути кинуті або спіймані. Тому вони створили веб-сторінку, яка скаржиться на ледачих розробників.


4
Там є полеміка , навіть якщо ця сторінка мало говорить про це. Що спірне - це відповідь на запитання "Чи допомагають перевірені винятки чи перешкоджають розробці кращого програмного забезпечення?" І: "Якщо так, то які винятки слід перевіряти, а які не потрібно перевіряти?" Я буду закладатися на те, що ви можете розпочати жваву дискусію, якщо у вас буде достатньо розробників (і пива) разом у кімнаті, щоб відповісти на ці питання.
Соломон повільно
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.