java - method - Asignación final de variable con try/catch
static final java (2)
No, no es el lugar correcto, imagina que tienes más de 1 instrucción en tu bloque try and catch, el primero dice: x = 42. Después de otros estados de cuenta, el bloque try falla y va al bloque catch, donde Diciendo x = 30. Ahora definiste x dos veces.
Como creo que es una buena práctica de programación, hago que todas mis variables (locales o de instancia) sean final
si están destinadas a ser escritas una sola vez.
Sin embargo, observo que cuando una asignación de variable puede generar una excepción, no se puede hacer que dicha variable sea final:
final int x;
try {
x = Integer.parseInt("someinput");
}
catch(NumberFormatException e) {
x = 42; // Compiler error: The final local variable x may already have been assigned
}
¿Hay una manera de hacer esto sin recurrir a una variable temporal? (¿o no es este el lugar correcto para un modificador final?)
Una forma de hacerlo es mediante la introducción de una variable temporal (no final
), pero usted dijo que no quería hacerlo.
Otra forma es mover ambas ramas del código a una función:
final int x = getValue();
private int getValue() {
try {
return Integer.parseInt("someinput");
}
catch(NumberFormatException e) {
return 42;
}
}
Que esto sea práctico o no depende del caso de uso exacto.
En general, siempre que x
sea una variable local con un ámbito apropiado, el enfoque general más práctico podría ser dejarlo sin final
.
Si, por otro lado, x
es una variable miembro, mi consejo sería usar un temporal no final
durante la inicialización:
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;
}
}