![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| icepro |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 175 Регистрация: 20.11.2006 Репутация: нет Всего: нет |
есть код, в нем проверка на выход за пределы массива, как перевести этот код на эксепшены?
|
|||
|
||||
| m1ha |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 53 Регистрация: 14.5.2007 Репутация: 1 Всего: 1 |
не до конца понимаю, что значит "перевести код на эксепшены"
можно оставить так, ArrayIndexOutOfBoundsException будет выкидываться сам если будет неправильный индекс
ну или кидать exception самому, если так хочется
или если ты хотел избежать именно if'a, то можно сделать вот так, но вобше делать проверки через эксепшены не самый хороший выбор
Это сообщение отредактировал(а) m1ha - 5.10.2009, 04:10 |
||||||
|
|||||||
| Sibit |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 96 Регистрация: 6.10.2009 Где: NSK Репутация: нет Всего: 1 |
А так не пойдет?
|
|||
|
||||
| duk |
|
|||
![]() Some Object ![]() Профиль Группа: Участник Сообщений: 179 Регистрация: 19.7.2007 Репутация: 4 Всего: 4 |
Sibit, какой смысл так делать? Это исключение не нужно обрабатывать. Вообще обрабатывать ошибки логики считается дурным тоном, потому как они, теоретически должны xD отсутствовать в программе.
Это объявление (throws ArrayIndexOutOfBoundsException) никак не повлияет на роботу пользователя с методом. |
|||
|
||||
| LSD |
|
||||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Жесть какая И как же скажем ArrayList должен обрабатывать такую ошибку логики, как выход за границы?
Хорошим тоном считается декларировать все выбрасываемые эксепшены, даже если они рантайм. Потому как IDE и прочие анализаторы кода могут использовать эту информацию. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
||||
|
|||||
| duk |
|
||||
![]() Some Object ![]() Профиль Группа: Участник Сообщений: 179 Регистрация: 19.7.2007 Репутация: 4 Всего: 4 |
LSD, Вы хотите сказать что при любом обращении к массиву, Вы объявляете метод в котором это происходит как таким, который генерирует исключения выхода за границы?
Добавлено @ 20:41 В данном случае, даже и если выход произойдет, исключение сгенерируется автоматически.
Для чего это делать? Добавлено @ 20:50
Я лично не заметил в исходном коде ArrayList перехвата исключений выхода за границы (правда в родительском были). Это сообщение отредактировал(а) duk - 6.10.2009, 21:20 |
||||
|
|||||
| duk |
|
||||
![]() Some Object ![]() Профиль Группа: Участник Сообщений: 179 Регистрация: 19.7.2007 Репутация: 4 Всего: 4 |
Код из класса ArrayList, вызывается в методе:
Но почему-то не объявлен генерирующими ни тот, ни другой. |
||||
|
|||||
| revenforv |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 6.8.2009 Где: Санкт-Петербург Репутация: нет Всего: нет |
Две цитаты с Programmers' guide по Exceptions (java.sun.com):
Которая говорит нам, что RuntimeException свидетельствуют о том, что программист, использующий наследуемый код, не достаточно хорошо знаком с API и совершает ошибки программирования. Не предполагается что после этих ошибок может быть восстановлена работа приложения, т.к. это не разумно. Насколько помню, в спецификации языка сказано о том же. "Throw RuntimeException then you do not expect one's application to recover. <...> Use that to mark up the programmatic errors while using API."
LSD, если вас не затруднит объясните, что вы хотели сказать следующей фразой "Хорошим тоном считается декларировать все выбрасываемые эксепшены, даже если они рантайм. Потому как IDE и прочие анализаторы кода могут использовать эту информацию." Это сообщение отредактировал(а) revenforv - 6.10.2009, 23:50 |
||||
|
|||||
| duk |
|
|||
![]() Some Object ![]() Профиль Группа: Участник Сообщений: 179 Регистрация: 19.7.2007 Репутация: 4 Всего: 4 |
Можно пойти дальше и обрабатывать исключения деления на 0 или объявлять методы такими, которые могут генерировать математические исключения.
|
|||
|
||||
| Sibit |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 96 Регистрация: 6.10.2009 Где: NSK Репутация: нет Всего: 1 |
Пример приведен вне контекста, вот я и предложил, что пришло в голову первым. Мы ведь не знаем кто вызывает функцию и откуда берутся параметры. ИМХО, если функцию будет использовать сторонее приложение, то выбрасывать исключение - разумно. Не факт конечно, что именно такое, он это зависит от контекста.
|
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
1. При чем тут вообще декларирование ексепшенов? Речь то шла об этой фразе:
Я уж не знаю что там изначально имелось в виду, но звучит как полнейшая жесть. В программе всегда есть ошибки и как можно писать программы не обрабатывая ошибки логики мне непонятно. 2. Все зависит от того откуда я получаю индексы для обращения (получаю извне или генерирую сам) к массиву и что это за метод (публичное API или приватное). В случае приватных API и/или самостоятельно вычисленных индексов я ничего не декларирую. В случае публичных API и переданных параметров я ексепшены декларирую. 3. Я считаю, что в публичных API декларировать запланированные RuntimeException нужно обязательно. Это можно сделать используя @throws в JavaDoc или throws, но делать это обязательно нужно. Например IDEA если у метода задекларировать throws IndexOutOfBoundsException и "окружить" блок кода try/catch то в catch будет именно IndexOutOfBoundsException, а не более общий Exception. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| duk |
|
|||
![]() Some Object ![]() Профиль Группа: Участник Сообщений: 179 Регистрация: 19.7.2007 Репутация: 4 Всего: 4 |
Когда я это писал, я имел в виду обработку runtime exceptions (выхода за пределы массива или, к примеру деление на 0), при помощи блоков try & catch. Возможно, я не совсем четко выразил свои мысли. По поводу объявления методов, которые генерируют такие исключения: ИМХО лучше делать, для отдельных случаев, в документации и описывать из-за чего это может произойти. Согласитесь, что 95% методов можно завешать такими объявлениями, так что подходить к этому делу нужно без фанатизма. |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |