我目前正在通过 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兼容。