Очень короткий вопрос: Есть ли более изящный способ сделать это:
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
Вы можете извлечь создание значения в его собственном методе:
final Object myObject = getObjectOrNull();
public Object getObjectOrNull() {
try{
return somethingThatCanFail();
} catch (Fail f) {
return null;
}
}
Это длиннее, но в зависимости от вашего определения «элегантного» это может быть более элегантный.
Зависит от того, что вы подразумеваете под "этим" (и "более элегантным")
Я не уверен, почему вы думаете, что вам нужны tmp И myObject, но нет никакого способа избежать их этих объявлений вне блока try, ЕСЛИ вы хотите получить к нему доступ в блоке catch.
Что не так с
Object myObject = null;
try {
myObject = somethingThatCanFail();
} catch (Fail f) {
// do nothing because we can deal with myObject being null just fine
}