0

それは単純なはずですが、私はそれを理解できません..私はこのコードを持っています:

Form<?> form2 = new Form<Void>("form2") {
    @Override
    protected void onSubmit() {
        ...
    dataView = new DataView("listview", new ListDataProvider(list));
        ...
    }
}
add(dataView);

dataView を定義する方法と場所は? エラーを発生させようとするとfinal DataView dataView = null;The final local variable dataView cannot be assigned, since it is defined in an enclosing type

4

1 に答える 1

0

final 変数に代入することはできず、囲まれた型内から参照できるのは final 変数のみです。ただし、囲まれた型内から final 変数を変更することはできます。

がすぐに利用できない場合は、DataView利用可能になるまでブロックするブロッキング キューが必要になる場合があります。

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue; 

final BlockingQueue<DataView> dataViews = new ArrayBlockingQueue<DataView>();
Form<?> form2 = new Form<Void>("form2") {
   @Override
   protected void onSubmit() {
      ...
      dataViews.offer(new DataView("listview", new ListDataProvider(list)));
      ...
   }
};
//form is submitted in a different thread somewhere between here and add
...
add(dataViews.take());


あなたが私たちに与えたコンテキストからはわかりませんが、最終的な変数を必要としない最も簡単な解決策は、次のadd(dataView)ように送信内で呼び出すことです。

Form<?> form2 = new Form<Void>("form2") {
   @Override
   protected void onSubmit() {
      ...
      DataView dataView = new DataView("listview", new ListDataProvider(list));
      add(dataView); 
      ...
   }
};
于 2012-10-04T15:46:59.383 に答える