Локальная переменная доступна изнутри внутреннего класса, должна быть объявлена ​​final (java)

Эта проблема очень распространена, когда вы пытаетесь использовать переменную, к которой нужно обращаться из другого класса! Иногда вы не замечаете, когда это произойдет, например, для использования threadPool на cordova потребуется внутренний класс:

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 и паролю, а это не финальная переменная.

Эту проблему можно легко исправить, объявив переменную с проблемой как окончательной.

// 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();
}
}
});

Хотя решение простое, но если вы не знаете, как его решить, иногда это может быть очень головной болью.

Ссылка на основную публикацию
Adblock
detector