¡Este problema es muy común cuando intentas usar una variable a la que se debe acceder desde otra clase! A veces, no te das cuenta de cuándo sucederá esto, por ejemplo, el uso de un threadPool en cordova necesitará una clase interna para ejecutarse:
String password = "qweqwe";
String config = "MyObjeto";
cordova.getThreadPool().execute(new Runnable() { // we are executing a nested class !
public void run() {
try {
Session session = new Session();
session.setConfig(config);
session.setPassword(password);
} catch (Exception e) {
error(e.getMessage().toString());
e.printStackTrace();
}
}
});
El código anterior arrojará una excepción porque está accediendo a la variable password y config cuando no se trata de una variable final.
Este problema se puede solucionar fácilmente declarando la variable con problema como final
.
// Ten en cuenta que puedes declarar final cualquier tipo de variable como objetos, clases, números, etc.
final String password = "qweqwe";
final String config = "MyObject";
cordova.getThreadPool().execute(new Runnable() { // we are executing a nested class !
public void run() {
try {
Session session = new Session();
session.setConfig(config);
session.setPassword(password);
} catch (Exception e) {
error(e.getMessage().toString());
e.printStackTrace();
}
}
});
Aunque la solución es fácil, si no sabes cómo solucionarlo, a veces puede ser un verdadero dolor de cabeza.
Conviertete en un programador más sociable