1

現在、 JavaFX が提供する同時実行APIを介してビジネス ロジックをディスパッチしています。しかし、私がつまずいた部分が1つあり、私にはきれいに感じられません。

基本的に、次のようなサービスを作成すると

public class FooCommand extends Service<Foo> {
    @Override protected Task<Foo> createTask() {
        return new Foo();
    }
}

そして私はonSucceeded

FooCommand fooCommand = CommandProvider.get(FooCommand.class);
fooCommand.setOnSucceeded(new FooSucceededHandler());
fooCommand.start();

このクラスのインスタンスに

public class FooSucceededHandler implements EventHandler<WorkerStateEvent> {
    @Override public void handle(WorkerStateEvent event) {
        Foo f = (Foo) event.getSource().getValue();
    }   
}

しかし、ご覧のとおり、Workertoの値をキャストする必要があります(Foo)。それを行うためのよりクリーンな方法はありますか?

4

1 に答える 1

0

独自の抽象クラスを作成できます。

public abstract class EventCallback<T> implements EventHandler<WorkerStateEvent> {

@Override
public void handle(final WorkerStateEvent workerStateEvent) {
    T returnType = (T) workerStateEvent.getSource().valueProperty().get();
    this.handle(returnType);
}

public abstract void handle(T objectReturned);

}

そしてそれを使用して:

final EventCallback<MonType> eventCallback = new EventCallback<MonType>() {
        @Override
        public void handle(final MonType objectReturned) {
            // DO STUFF
        }
};

EventHandler でもあるため、JavaFX 並行 API と互換性があります。

于 2013-10-08T11:59:18.457 に答える