Я экспериментировал с клиентской библиотекой Apache HTTP в Eclipse.
<dependency org="org.apache.httpcomponents" name="httpclient" rev="4.3.1"/>
и следующий фрагмент кода выдает проверенное исключение и требует обработки.
HttpResponse response = httpClient.execute(httprequest);
Затмение дает 3 предложения
Добавить выбрасывает исключение -
throws ClientProtocolException, IOException
(отлично работает)Окружить попыткой поймать -
try { HttpResponse response = httpClient.execute(httprequest); } catch (ClientProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }
(тоже работает нормально)
Окружите с помощью try/multicatch
try { HttpResponse response = httpClient.execute(httprequest); } catch (ClientProtocolException | IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }
3 вариант дает ошибку
Исключение ClientProtocolException уже перехвачено альтернативным IOException.
Я видел исходный код для ClientProtocolException
и это IOException
. Насколько я понимаю, при перехвате нескольких исключений мы можем поймать более общее исключение ниже более конкретного. Итак, мы не можем поймать ClientProtocolException
после того, как поймали IOException
.
Так почему же это происходит в multi try-catch? И если это не должно работать, почему Eclipse дает это предложение на 1-м месте?