1
我目前通過Concurrency API JavaFX提供調度業務邏輯。但有一部分我偶然發現,對我而言,感覺不到乾淨。在不投射的情況下使用WorkerStateEvent?
基本上如果你創建一個服務,它可能看起來像這樣
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();
}
}
但作爲實例你可以看到我需要投入的價值至(Foo)
。有沒有更乾淨的方法來做到這一點?
好吧,這只是將問題轉移到另一層。無論如何,即使你不知道結果是否是這個實例,你仍然在抽象中進行投射。問題是,你需要通過使用「程序員技能」來捕獲類型,而不是編譯器的類型檢查。我嘗試了擴展WorkerStateEvent,但確實不行,因爲它不允許使用子類(但是我不知道Java8) – thatsIch
如果沒有實現自定義CommandProvider/Service/etc,那麼不能擴展WorkerStateEvent ...因爲它們是管理這些事件的構建和分派的組件。因此,要麼等待JavaFX團隊實現一個在WorkerStateEvent內部通用的值屬性(這意味着修改此事件實例化的JavaFX的每個部分),要麼讓您自己的圖層順利地管理演員陣列。我沒有看到另一個選項:( – zenbeni