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 に答える