2017-11-15 2 views
1

私はこのエラーが取得ActionListenerでローカル変数を初期化する方法は?</p> <blockquote> <p>Local variable word defined in an enclosing scope must be final or effectively final.</p> </blockquote> <p>コードは次のようになります: - 私はActionListenerの内のローカル変数を初期化したい場合はJavaの

int number = 0; 

anyButton.addActionListener(new ActionListener() { 

    @Override 
    public void actionPerformed(ActionEvent arg0) { 

     //And here I get the error: 
     number++; 

    } 
}); 

は、あなたがそれを行う方法を知っていますか?

+1

私のようにフラグこれをつもりはありません質問はわずかに異なりますので、重複していますが、なぜこれがここにあるのかという理由とその理由の背後にある理由があります:[匿名クラスでは最終変数だけがアクセスできるのはなぜですか?](https://stackoverflow.com/questions/4732544/why-匿名クラスでしかアクセスできない) –

+0

Ok!私はその質問を見ませんでした。ごめんなさい! – Andy

答えて

1

プリミティブではなく、可変スレッドセーフ変数が必要です。

は、ラッパークラスのいずれかによってそのプリミティブの交換を検討(あなた自身の、または標準的なものである可能性があり[例えば AtomicInteger])または単一要素の配列:

final AtomicInteger number = new AtomicInteger(); 
... 
number.getAndIncrement(); 
+0

数字は次のようになります: 'AtomicInteger word = 0;'?それはうまくいきません... – Andy

+1

@Andy、私は例を提供しました。参照型にプリミティブを割り当てることはできません(ボクシング/アンボクシングのマジックを除く) – Andrew

関連する問題