Назначьте конечную переменную в блоке try - PullRequest
8 голосов
/ 15 июня 2010

Очень короткий вопрос: есть ли более элегантный способ сделать это:

Object tmp;
try {
 tmp = somethingThatCanFail();
} catch (Fail f) {
 tmp = null;
}
final Object myObject = tmp;
// now I have a final myObject, which can be used in anonymous classes

Ответы [ 3 ]

12 голосов
/ 15 июня 2010

Вы можете извлечь создание значения в его собственном методе:

final Object myObject = getObjectOrNull();

public Object getObjectOrNull() {
  try{
    return somethingThatCanFail();
  } catch (Fail f) {
    return null;
  }
}

Это длиннее, но в зависимости от вашего определения «элегантного» оно может быть более элегантным.

0 голосов
/ 21 декабря 2015

В наши дни я склонен делать это так

final Thingy zeFing; {
    Thingy t = null;
    try {
        t = somethingThatCanFail();
    } catch (CurveBall f) {
        // log...
    }
    zeFing = t;
}
0 голосов
/ 15 июня 2010

Зависит от того, что вы подразумеваете под "этим" (и "более элегантным")

Я не уверен, почему вы считаете, что вам нужен tmp AND myObject, но нет способа избежать появления одного из этих объявлений внеблок try, если вы хотите получить к нему доступ в блоке catch.

Что не так с

Object myObject = null;
try {
  myObject = somethingThatCanFail();
} catch (Fail f) {
  // do nothing because we can deal with myObject being null just fine
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...