The final local variable cannot be assigned, since it is defined in an enclosing type
final, inner-classes, java
Solution
Well, the standard trick is to use an int array of length one. Make the var final and write to `var[0]`. It is very important to make sure you don't create a data race. Using your code as an example:
final int[] vote = {0};
class SliderMoved implements ChangeListener {
public void stateChanged(ChangeEvent e) {
vote[0] = ratingS.getValue();
}
}
Since all this will be happenenig on the EDT, including the callback invocation, you should be safe. You should also consider using the anonymous class:
ratingS.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) { vote[0] = ratingS.getValue(); }
});
Problem
``` ratingS = new JSlider(1, 5, 3); ratingS.setMajorTickSpacing(1); ratingS.setPaintLabels(true); int vote; class SliderMoved implements ChangeListener { public void stateChanged(ChangeEvent e) { vote = ratingS.getValue(); } } ratingS.addChangeListener(new SliderMoved()); ``` If i write the above code Eclipse tells me this: Cannot refer to a non-final variable vote inside an inner class defined in a different method But if i add final before int vote it gives me this error: The final local variable vote cannot be assigned, since it is defined in an enclosing type So, how to solve?