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?

Original source

Related problems