从内部类内部访问局部变量,需要将其声明为final(java)

当你尝试使用需要从另一个类访问的变量时, 此问题非常普遍!有时, 你不知道何时会发生这种情况, 例如在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();   } }});

【从内部类内部访问局部变量,需要将其声明为final(java)】前面的代码将引发异常, 因为你要访问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();   } }});

尽管解决方案很简单, 但如果你不知道如何解决, 有时可能会非常头痛。

    推荐阅读