1

我目前正在通过并发API JavaFX 提供我的业务逻辑。但是我偶然发现了一个对我来说并不干净的部分。

基本上,如果您创建一个看起来像这样的服务

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 回答