Я создаю приложение в Play Framework и сталкиваюсь с проблемой в одном из моих определений функций. На самом деле это не вопрос в Play Framework, но это относится к Play, потому что из-за этой ошибки sbt compile
не работает.Обработка исключений с возвращаемыми значениями
Так что я эта функция в одном из моих классов:
private JSONObject getJsonObject(String url) {
HttpResponse<JsonNode> response;
try {
response = Unirest.get(url).asJson();
} catch (UnirestException e) {
Logger.error("Failed to GET data. Connection string was: " + url);
e.printStackTrace();
}
return response.getBody().getObject();
}
Поэтому я решил поймать исключение внутри функции, что я не хочу, чтобы моя функцию throw
исключения. Потому что тогда этот try-catch
должен выполняться в нескольких местах, где выполняется вызов этой функции. Я могу избежать этого, поставив throws UnirestExecption
, но это будет пузыриться полностью через весь стек функций, вплоть до конструкторов классов.
Однако с текущим кодом, мой IDE и sbt compile
и скажи:
[error]: variable response might not have been initialized
Как выйти из этого в этом случае? Я не могу сделать new HttpResponse()
, потому что class definition выглядит слишком страшно для меня. Я, конечно, не могу сделать еще Unirest.get()
, потому что это сделает исключение из своего собственного!
Что такое более быстрый выход?
Что вы хотите, чтобы ваша функция возвращала, когда ' Вызывается UnirestException'? – Marvin
@ Марвин Я даже не думал об этом! См. Мой комментарий к принятому ответу. :-) – dotslash