Почему я получаю это сообщение, когда пишу обработчик, и компилятор настаивает на том, чтобы сделать эту переменную окончательной?
Cannot refer to a non-final variable inside an inner class defined in a different
method
Мой вопрос в том, как я могу определить переменную non-final в моем коде: (как я могу изменить книгу, файл, примечание и время до финала), они являются глобальными переменными, и я передаю их trakingNotes
public void trakingNotes (final double book, final long file, final String note, final double Time) {
MaxInfo = 100;
Timer updateTimer = new Timer("NoteSaveings");
updateTimer.scheduleAtFixedRate(new TimerTask() {
public void run() {
updateGUI( book, file, note, Time);
}
}, 0, 1000);
}
NotesDB dbnotes = new NotesDB(this);
private void updateGUI( final double book, final long file, final String note, final double Time) {
long idy;
// Update the GUI
noteHandler.post(new Runnable() {
public void run() {
long idy;
dbnotes.open();
idy= dbnotes.insertnoteTitle (book, file, note, Time);
if ((book) == samebook )//samebook is a global varible
{ReadDBnotes();}
dbnote.close();
});}
Вы должны объявить книгу, файл, примечание и время окончательными, потому что вы используете их внутри анонимных внутренних классов.
Я думаю, вы не хотите, чтобы они были окончательными, потому что вы хотите изменить их ценности. Это может быть достигнуто с использованием дополнительных конечных переменных. Если вы хотите изменить стоимость книги, вы можете написать это:
public void trakingNotes (double book, final long file, final String note, final double Time) {
MaxInfo = 100;
Timer updateTimer = new Timer("NoteSaveings");
final double changedBook = book + 1.0;
updateTimer.scheduleAtFixedRate(new TimerTask() {
public void run() {
updateGUI( changedBook, file, note, Time);
}
}, 0, 1000);
}