当你尝试使用需要从另一个类访问的变量时, 此问题非常普遍!有时, 你不知道何时会发生这种情况, 例如在cordova上使用threadPool将需要执行一个内部类:
String password = "qweqwe";
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();
}
}
});
前面的代码将引发异常, 因为你要访问config和password, 并且它不是最终变量。
可以很容易地解决此问题, 将具有问题的变量声明为final。
// Note that you can declare final any kind of variable like objects, classes, numbers 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();
}
}
});
尽管解决方案很简单, 但如果你不知道如何解决, 有时可能会非常头痛。
评论前必须登录!
注册