【问题标题】:How to declare Callable to execute function returning void in Java?如何声明 Callable 以执行在 Java 中返回 void 的函数?
【发布时间】:2013-09-01 22:59:07
【问题描述】:

假设我想异步运行静态方法foo

void foo() throws Exception {...} 

由于foo 引发异常,我宁愿创建一个Callable 并用它调用ExecutorService.submit 以获得Future

现在我想知道如何正确声明CallableFuture。 我应该声明它们

Callable<Void> and Future<Void>?

【问题讨论】:

  • Yes.Callable。但是 void 与 Void 不兼容,因此您必须从返回 Void 的包装器方法调用您的 foo()。
  • 为什么不 Callble 和 Future
  • @TomF 为什么不可以调用 和 Future?
  • 不知道,所以才问为什么
  • 我错过了大写V。

标签: java concurrency future callable


【解决方案1】:

我应该声明它们Callable&lt;Void&gt;Future&lt;Void&gt;吗?

是的。

Void 类似于包装类 IntegerLong 等,用于原始类型 intlong 等。你可以说它是 void 的包装类,尽管 @987654329 @ 不是真正的类型。

【讨论】:

  • 由于您必须返回 Void 类型的结果,因此您的 Callback#call() 方法必须返回 null。因此,无论如何您都必须返回,您可以使用 Boolean 作为返回类型并返回 Boolean.TRUE(或在错误 Boolean.FALSE 的情况下)。所以它可能具有更好的可读性。
【解决方案2】:

我认为你应该声明它们Callable&lt;?&gt;Future&lt;?&gt;。然后,您可以随心所欲地实现它们,包括 Callable&lt;Void&gt;Future&lt;Void&gt;

【讨论】:

  • 不,在 OP 询问的情况下它不起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-04
  • 1970-01-01
  • 2012-09-26
  • 2014-05-12
相关资源
最近更新 更多