Ответ 1
Один из способов сделать это - ввести временную переменную (final
), но вы сказали, что не хотите этого делать.
Другой способ - переместить обе ветки кода в функцию:
final int x = getValue();
private int getValue() {
try {
return Integer.parseInt("someinput");
}
catch(NumberFormatException e) {
return 42;
}
}
Независимо от того, насколько это реально, зависит от конкретного варианта использования.
В общем случае, если x
является локальной областью с соответствующей областью, наиболее практичный общий подход может заключаться в том, чтобы оставить его не final
.
Если, с другой стороны, x
является переменной-членом, моим советом было бы использовать не final
во время инициализации:
public class C {
private final int x;
public C() {
int x_val;
try {
x_val = Integer.parseInt("someinput");
}
catch(NumberFormatException e) {
x_val = 42;
}
this.x = x_val;
}
}