我有这个(部分伪)代码
class a {
void b()
{
int d = 0;
JButton c = new JButton();
c.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e)
{
d = 1;
}
});
}
}
然而,它不起作用,eclipse建议在d中添加最终标识符,但这使得值无法改变。对不起,如果这是一个愚蠢的问题,但很难为谷歌提出类似这样的问题...... 我也不能在杠杆上声明变量高于方法b。
答案 0 :(得分:1)
您可能希望将d的声明移到方法之外。
class a {
int d = 0;
method b() {
JButton c = new JButton();
c.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
d = 1;
}
}
}
..并格式化您的代码。
答案 1 :(得分:1)
这是因为代码:
c.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
d = 1;
}
});//a little corrected here
实际上创建了一个新的嵌套类和overrides
actionPerformed(ActionEvent e)
方法。
由于它不是同一个类的一部分, secure java不允许该嵌套类方法访问除声明的final
之外的本地变量。 / p>