0

我有这个(部分伪)代码

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,但这使得值无法更改。抱歉,如果这是一个愚蠢的问题,但很难为 Google 提出这样的问题......我也不能在高于方法 b 的杠杆上声明变量。

4

2 回答 2

1

您可能希望将 d 的声明移到方法之外。

class a {
  int d = 0;

  method b() {
    JButton c = new JButton();
    c.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
      d = 1;
    }
  }

}

..并格式化您的代码。

于 2012-06-04T19:01:45.993 回答
1

这是因为代码:

c.addActionListener(new ActionListener()
          {
             public void actionPerformed(ActionEvent e)
             {
                d = 1;
             }
          });//a little corrected here

实际上创建了一个新的嵌套类和overrides方法actionPerformed(ActionEvent e)。由于它不是同一类的一部分,因此安全java 不允许该嵌套类方法访问除声明之外的局部变量。final

于 2012-06-04T19:02:35.867 回答