我有一个名为Promise的课程如下:
所以这似乎是一种来自函数式编程的设计模式,我们正在干扰Java。重要的是我们可以在延迟事件上进行菊花链连接,我理解这是一个更加内置于C#3.0语言的功能,但你必须与Java类一起破解。不幸的是,其中一个,我不知道这个比“承诺”或“未来”更好的名称,这似乎有误导性,因为重点更多的是“DelayedCallStack”然后手头的价值,两个,我不知道除了编写我们自己相当复杂的Promise类之外,还有什么方法可以做到这一点理想情况下,我想从功能性Java库中解除这个问题,但到目前为止这个概念还没有。
注意Java甚至没有为带有参数的异步回调提供语言/库支持,这也是我对能够找到它的过程非常悲观的一个原因。
那么,这种模式是什么,可以在图书馆中完成吗?
答案 0 :(得分:3)
看看番石榴的ListenableFuture:
http://code.google.com/p/guava-libraries/wiki/ListenableFutureExplained
ListenableFuture允许您添加在Future计算完成时要执行的回调。您可以控制回调执行的线程池,因此它们可以同步或异步执行。
答案 1 :(得分:2)
我只能说我们在Flex(ActionScript)中实现了几乎完全相同的东西,我们也称它为Promise。在Clojure中,promise更加轻量级:它上面的get
操作会阻塞,直到另一个线程deliver
为承诺。它基本上是一个单元素队列,除了它永远保留其值,因此后续get
总是成功。
你所拥有的是一种承诺,伴随着观察者的价值。我不知道有任何特殊的术语涵盖这种情况。
现在我注意到你的“承诺/未来”可能拥有产生其未来价值的代码(至少它是否存在并不完全明显)。我提到的ActionScript实现没有这样做 - 它的行为类似于Clojure,它的值来自外部。我认为这是未来和承诺之间的关键区别。