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);
...
}
};