2013-08-29 110 views
16

假設我想運行靜態方法foo異步如何聲明Callable執行在Java中返回void的函數?

void foo() throws Exception {...} 

由於foo拋出一個異常,我寧願創建Callable並調用ExecutorService.submit用它來獲得一個Future

現在我想知道如何正確申報CallableFuture。 我應該聲明他們

Callable<Void> and Future<Void>? 
+1

Yes.Callable 。但是void和Void不兼容,所以你必須從返回Void的包裝方法中調用你的foo()。 –

+0

爲什麼不是Callble 和Future ? – TomF

+0

@TomF爲什麼不能Callable 和Future ? – emory

回答

22

我應該聲明他們Callable<Void>Future<Void>

是的。

Void是類似的包裝類IntegerLong等爲基本類型intlong等,你可以說這是對void包裝類,即使void是不是一個真正的類型。

+1

而你必須返回類型爲Void的結果,你的Callback#call()方法必須返回null。 因此,無論如何您必須返回,您可能會使用布爾值作爲返回類型並返回Boolean.TRUE(或者在布爾值爲false的情況下)。所以它可能會有更好的可讀性。 – user2777500

2

我想你應該聲明他們Callable<?>Future<?>。然後,您可以按照自己的意願實施它們,包括Callable<Void>Future<Void>

+0

不行,在OP詢問的情況下不會起作用。 – Anton