| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > Как узнать, какие исключения бросает метод? |
| Автор: Karadul 25.3.2012, 13:09 |
| Если бросается, скажем, IOException, как узнать, какие точно его подклассы бросаются? |
| Автор: Stolzen 25.3.2012, 15:37 | ||
А для чего? Класс можно узнать так:
|
| Автор: Karadul 25.3.2012, 17:18 |
| Для того, чтобы ловить их поодиночке, и все это в статике. Т.е. чтобы различать, например, ошибку коннекта и ошибку резолва имени. |
| Автор: priam220 25.3.2012, 19:00 | ||
Если у тебя в деклорации метода стоит IOException, то его и придется ловить ( или эксепшн выше по иерархии). Но если тебе доподленно известно, что могут быть выброшены сабклассы IOException (например InterruptedIOException), и тебе надо этот InterruptedIOException обработать как то отдельно, то в чем собственно проблема?
|
| Автор: Karadul 25.3.2012, 20:08 |
| Проблема в том, чтобы узнать, какие именно подклассы бросаются. Эклипс показывает в quick fix только надкласс. |
| Автор: priam220 25.3.2012, 20:32 |
| Если в документации к либе или java-доках нет информации о других эксепшенах - значит ты не должен их обрабатывать. В следующей версии фреймворка эксепшены могут измениться и твой код на новой версии будет не работоспособным, - твое приложение перестает быть обратно-совместимым, что не совсем верно. А вообще, если это опенсорс - всегда можно воспользоваться сырцами. Если нет - только документация, или метод тыка. |
| Автор: Karadul 25.3.2012, 20:59 |
| А не колупаясь в доках и сырцах это можно как-то сделать? IDE это может показать? |
| Автор: priam220 25.3.2012, 21:28 |
| if подключенные сырцы/javadoc к ИДЕ != "IDE это может показать", то нет. |
| Автор: Karadul 25.3.2012, 21:56 |
| Да, список всех типов эксепшенов, которые может бросать метод, без того, чтобы подтипы поглощались надтипами. |
| Автор: Karadul 26.3.2012, 16:47 |
| А как же статический анализ и ко? Ты имеешь в виду throws ..., ...? |
| Автор: Stolzen 26.3.2012, 17:00 |
Да, именно это. Зачем? Опять же повторюсь - public api задает контракт. Все, что выходит за рамки этого контракта - внештатная ситуация (или кривые руки автора), поэтому ловить это нужно в очень редких случаях. |
| Автор: Karadul 26.3.2012, 18:57 |
| Вот реальный пример. http://docs.oracle.com/javase/1.4.2/docs/api/java/net/ConnectException.html поглощается SocketException, а оно поглощается IOException. Если я хочу различать ConnectException и другие ошибки, я нарушаю контракт? Модуль кидает IOException. |
| Автор: Karadul 26.3.2012, 21:47 |
| Подскажите хоть запрос для гугла. Тут, похоже, проку не будет. |
| Автор: sergioK1 27.3.2012, 16:09 | ||||
ты не хами , тут никто ничем не обязан ,
пойдет ? |
| Автор: jk1 27.3.2012, 23:26 | ||
По сути: Универсального способа нет. От IDE тут пользы мало, от гугла немногим больше. Либо надо смотреть исходники интересующего API, либо ставить эксперимент и смотреть, что конкретно вылетает. |