Вы не должны поймать исключение в этой точке.Не за что.Это делает ваш код намного проще.Что вам нужно сделать, это освободить все ресурсы, которые вы использовали, и делать это правильно.Вот код, который должен это сделать:
@Nonnull
public HttpResponse executeRestClientServiceCall(HttpUriRequest request) throws IOException {
HttpClient client = new DefaultHttpClient();
HttpResponse httpResponse = client.execute(request);
try {
// ... other code ...
} finally {
HttpEntity entity = httpResponse.getEntity();
if (entity != null) {
entity.getContent().close();
}
}
return httpResponse;
}
На данный момент вы не можете решить, что делать с исключением, поэтому лучше всего просто пропустить его до вызывающей стороны.Может быть, он знает, что с этим делать.
Бросок исключения дает звонящему больше возможностей, чем просто возврат null
.
Учитывая другие ваши вопросы:
Но в то же время я не хочу инициализировать HttpResponse нулевым значением.
Это хорошо, поскольку вы можете написать свой код так, чтобы переменная всегда содержала надлежащий объект.См. Приведенный выше код.
Что является хорошим способом добавления бросков для метода или добавления блоков try / catch с httpResponse, инициализированным в null.
Я ответил на это выше.Хорошим способом является добавление предложения throws
для метода.
Я хочу добавить методы получения / установки для HttpResponse, объявив это как переменную-член.
Не делай этого.HttpResponse
- это объект, который обычно имеет очень короткую продолжительность жизни.Он всегда должен храниться в локальной переменной, и когда метод возвращается, нет необходимости сохранять его.Это отличается от HttpClient
, который вы должны хранить в поле класса, поэтому вы можете добавить пул соединений позже, если вам это нужно.