【发布时间】:2014-02-24 11:21:57
【问题描述】:
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 会告诉我:
不能在内部类中引用非最终变量投票 用不同的方法定义
但是如果我在 int vote 之前添加 final 它会给我这个错误:
最终的局部变量 vote 不能赋值,因为它是在封闭类型中定义的
那么,怎么解决呢?
【问题讨论】:
-
尝试将其设为静态或将其置于已移动但未更改状态的滑块中。或以“this.vote”或“zxc myClass = new zxc(); 的形式访问它,并以 myClass.vote 的形式访问它”
-
vote应该是一个字段,而不是一个局部变量。 -
我不能使用“静态”变量投票的非法修饰符;只允许 final 其他方式不能使我的程序正常工作
-
@JBNizet 我认为如果没有更多信息,我们无法判断
vote是否应该是一个字段。如果这是在一个可以从不同线程重入调用的方法中,那么将其作为一个字段将是不好的。无论如何,如果这确实是一个仅在方法内部使用的变量,那么将其设置为可以被其他方法访问的字段对我来说似乎是一种“设计气味”。 (您确实是指外部类中的一个字段,对吧?)
标签: java inner-classes final