Модераторы: LSD, AntonSaburov

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Как узнать, какие исключения бросает метод? если они поглощаются надклассом 
:(
    Опции темы
Karadul
Дата 25.3.2012, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.5.2006

Репутация: 0
Всего: 1



Если бросается, скажем, IOException, как узнать, какие точно его подклассы бросаются?
PM MAIL   Вверх
Stolzen
Дата 25.3.2012, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

Репутация: 23
Всего: 48



А для чего? Класс можно узнать так:

Код

try {
    // код
} catch (IOException e) {
    System.out.println(e.getClass());
}



--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
Karadul
Дата 25.3.2012, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.5.2006

Репутация: 0
Всего: 1



Для того, чтобы ловить их поодиночке, и все это в статике. Т.е. чтобы различать, например, ошибку коннекта и ошибку резолва имени.
PM MAIL   Вверх
priam220
Дата 25.3.2012, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 4.6.2010

Репутация: 7
Всего: 8



Если у тебя в деклорации метода стоит IOException, то его и придется ловить ( или эксепшн выше по иерархии). Но если тебе доподленно известно, что могут быть выброшены сабклассы IOException (например InterruptedIOException), и тебе надо этот InterruptedIOException  обработать как то отдельно, то в чем собственно проблема?
Код


    public static void main(String[] args) {
       try{
           exT();
       }catch (InterruptedIOException e){
                  e.printStackTrace();
       } catch (IOException e){
                  e.printStackTrace();
       }
    }
    public static void exT() throws IOException {
        if(true)   throw new InterruptedIOException();
    }

PM MAIL   Вверх
Karadul
Дата 25.3.2012, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.5.2006

Репутация: 0
Всего: 1



Проблема в том, чтобы узнать, какие именно подклассы бросаются. Эклипс показывает в quick fix только надкласс.
PM MAIL   Вверх
priam220
Дата 25.3.2012, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 4.6.2010

Репутация: 7
Всего: 8



Если в документации к либе или java-доках нет информации о других эксепшенах - значит ты не должен их обрабатывать. В следующей версии фреймворка эксепшены могут измениться и твой код на новой версии будет не работоспособным, - твое приложение перестает быть обратно-совместимым, что не совсем верно.
А вообще, если это опенсорс - всегда можно воспользоваться сырцами. Если нет - только документация, или метод тыка.
PM MAIL   Вверх
Karadul
Дата 25.3.2012, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.5.2006

Репутация: 0
Всего: 1



А не колупаясь в доках и сырцах это можно как-то сделать? IDE это может показать?
PM MAIL   Вверх
priam220
  Дата 25.3.2012, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 4.6.2010

Репутация: 7
Всего: 8



if подключенные сырцы/javadoc к ИДЕ != "IDE это может показать", то нет.  smile  Даж не представляю, что иде должно показывать по вашему, если честно... Список всех встречающихся эксепшенов в методе?


Это сообщение отредактировал(а) priam220 - 25.3.2012, 21:31
PM MAIL   Вверх
Karadul
Дата 25.3.2012, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.5.2006

Репутация: 0
Всего: 1



Да, список всех типов эксепшенов, которые может бросать метод, без того, чтобы подтипы поглощались надтипами.
PM MAIL   Вверх
Stolzen
Дата 26.3.2012, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

Репутация: 23
Всего: 48



Цитата(Karadul @  25.3.2012,  22:56 Найти цитируемый пост)
Да, список всех типов эксепшенов, которые может бросать метод, без того, чтобы подтипы поглощались надтипами. 

Это на усмотрение автора метода. Если автор в public api не добавил это исключение, значит, ide не покажет. 


--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
Karadul
Дата 26.3.2012, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.5.2006

Репутация: 0
Всего: 1



А как же статический анализ и ко?

Цитата(Stolzen @  26.3.2012,  15:19 Найти цитируемый пост)
 в public api 

Ты имеешь в виду throws ..., ...?
PM MAIL   Вверх
Stolzen
Дата 26.3.2012, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

Репутация: 23
Всего: 48



Цитата(Karadul @  26.3.2012,  17:47 Найти цитируемый пост)
Ты имеешь в виду throws ..., ...? 

Да, именно это. 

Цитата(Karadul @  26.3.2012,  17:47 Найти цитируемый пост)
А как же статический анализ и ко?

Зачем? Опять же повторюсь - public api задает контракт. Все, что выходит за рамки этого контракта - внештатная ситуация (или кривые руки автора), поэтому ловить это нужно в очень редких случаях.


--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
Karadul
Дата 26.3.2012, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.5.2006

Репутация: 0
Всего: 1



Вот реальный пример. ConnectException поглощается SocketException, а оно поглощается IOException. Если я хочу различать ConnectException и другие ошибки, я нарушаю контракт? Модуль кидает IOException.
PM MAIL   Вверх
Karadul
Дата 26.3.2012, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.5.2006

Репутация: 0
Всего: 1



Подскажите хоть запрос для гугла. Тут, похоже, проку не будет.

Это сообщение отредактировал(а) Karadul - 26.3.2012, 21:47
PM MAIL   Вверх
sergioK1
Дата 27.3.2012, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 417
Регистрация: 30.1.2011

Репутация: нет
Всего: нет



Цитата(Karadul @ 26.3.2012,  20:47)
Подскажите хоть запрос для гугла. Тут, похоже, проку не будет.

ты не хами , тут никто ничем не обязан ,

Код

   try {
        Socket s= new Socket("localhost",8080);
    } catch (UnknownHostException e) {
        
        e.printStackTrace();
    }
    catch (SocketException e) {
    
    }    
     catch (IOException e) {
        
        e.printStackTrace();
    }
    catch (Exception e) {
        
    }


 пойдет ?
PM MAIL   Вверх
jk1
Дата 27.3.2012, 23:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1168
Регистрация: 17.10.2008
Где: Санкт-Петербург

Репутация: 40
Всего: 75




M
jk1

Karadul, 

Не в первый раз уже на конфликт выходите. Посты с откровенными наездами я потер за полной неконструктивностью. 
Будете продолжать в том же духе - будет бан и всего делов. Тема закрыта.


По сути:
Универсального способа нет. От IDE тут пользы мало, от гугла немногим больше. Либо надо смотреть исходники интересующего API, либо ставить эксперимент и смотреть, что конкретно вылетает.


--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Закрытая темаСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0546 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.