4

menuItems をメニューに追加する for ループがあります。各メニュー項目を追加した後、アクションリスナーを追加したいので、メニューをクリックすると、対応するインデックス項目が配列から読み込まれます。問題は、Java が匿名アクション リスナー クラスから arraylist.get(i) を呼び出すことを許可しないことです。i は反復ごとに増加するため、i を final にすることはできません。誰でも助けることができますか?乾杯

4

2 に答える 2

6

final要素を匿名クラスの外部参照として抽出しないのはなぜですか?

for (int i = 0: i < list.size(); i++) {
   final elem = list.get(i);
   // now use it...
}

これは別の理由でより安全であることに注意してください。元のソリューションでは、リストに戻りますが、匿名クラスがコールバックごとに異なるオブジェクトを抽出できるように、リストが変更される可能性があります。このバリアントでfinalは、実際のインスタンスへの参照が与えられます。

于 2012-12-13T17:11:37.687 に答える
0

ActionListener を public クラスとして実装し、必要なメニュー項目をそのコンストラクターに渡すことができます。

于 2012-12-13T17:14:25.193 に答える