Експериментирах с HTTP клиентска библиотека на Apache в Eclipse
<dependency org="org.apache.httpcomponents" name="httpclient" rev="4.3.1"/>
и следният фрагмент от код хвърля проверено изключение и трябва да бъде обработено.
HttpResponse response = httpClient.execute(httprequest);
Eclipse дава 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
.
Така че защо това се случва при много опити за улавяне? И ако не се предполага, че работи, защо Eclipse дава това предложение на 1-во място?