Este es un problema común en java y ocurre cuando intentas acceder a una variable en una clase anidada.

¡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.


Ingeniero de Software Senior en EPAM Anywhere. Interesado en la programación desde los 14 años, Carlos es un programador autodidacta, fundador y autor de la mayoría de los artículos de Our Code World.

Conviertete en un programador más sociable

Patrocinadores