从库中返回Java Future的最佳实践

5

我正在开发一个Java库,实现跳点搜索算法。该库提供了两个公开方法来运行搜索:一个是同步的方法,另一个返回Java Future类型的结果。

public Future<Queue<T>> findPath(T start, T goal) {
    FutureTask<Queue<T>> future = new FutureTask<>(() -> findPathSync(start, goal));
    future.run();
    return future;
}

我想知道在这种情况下的最佳实践是什么。 库应该实际运行FutureTask并返回Future,还是应该返回FutureTask,让最终用户知道任务尚未执行?谢谢!

1
完全同意Doug的观点。我更喜欢使用Future而不是FutureTask。如果你要提供给用户需要发送到Executor的内容,那么请使用更好的方法名称并指定返回类型为FutureTask。但是,如果你认为API需要FutureTask,那就另说了。我个人并不这样认为。 - markspace
1个回答

4

我无法确定是否有“最佳实践”,但作为用户,如果我调用一个方法,我的默认假设是它已经触发了某些东西——通常“仅构造”范式是为生成器模式或工厂保留的。

因此,您所提供的代码是我预期的行为,也是我在其他系统中(如Node.js)看到的最常见的行为。


1
我想要补充的是,如果你打算推迟执行,我建议你使用适当的命名约定向代码/API的读者发出信号 - findPath听起来就像是这么做。 - Doug Moscrop
很酷,感谢您的输入。当您这样表达时,确实非常有道理。 - Kevin Sheehan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接