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());
如果我写上面的代码 Eclipse 会告诉我:
无法引用内部类中的非最终变量投票
以不同的方法定义
但如果我添加final before int vote它给了我这个错误:
最终的局部变量 vote 无法分配,因为它是在封闭类型中定义的
那么,如何解决呢?
好吧,标准技巧是使用长度为 1 的 int 数组。使 var 最终并写入var[0]
。确保不会造成数据争用非常重要。以您的代码为例:
final int[] vote = {0};
class SliderMoved implements ChangeListener {
public void stateChanged(ChangeEvent e) {
vote[0] = ratingS.getValue();
}
}
由于所有这些都将在 EDT 上发生,包括回调调用,因此您应该是安全的。您还应该考虑使用匿名类:
ratingS.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) { vote[0] = ratingS.getValue(); }
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)