在不进行强制转换的情况下使用 WorkerStateEvent



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

基本上,如果您创建一个可能如下所示的服务

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

但如您所见,我需要将Worker的值转换为(Foo).有没有更清洁的方法可以做到这一点?

你可以创建自己的抽象类:

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

由于它也是一个事件处理程序,因此它与JavaFX并发API兼容。

相关内容

  • 没有找到相关文章

最新更新