假設我想運行靜態方法foo
異步如何聲明Callable執行在Java中返回void的函數?
void foo() throws Exception {...}
由於foo
拋出一個異常,我寧願創建Callable
並調用ExecutorService.submit
用它來獲得一個Future
。
現在我想知道如何正確申報Callable
和Future
。 我應該聲明他們
Callable<Void> and Future<Void>?
假設我想運行靜態方法foo
異步如何聲明Callable執行在Java中返回void的函數?
void foo() throws Exception {...}
由於foo
拋出一個異常,我寧願創建Callable
並調用ExecutorService.submit
用它來獲得一個Future
。
現在我想知道如何正確申報Callable
和Future
。 我應該聲明他們
Callable<Void> and Future<Void>?
我應該聲明他們
Callable<Void>
和Future<Void>
?
是的。
Void
是類似的包裝類Integer
,Long
等爲基本類型int
,long
等,你可以說這是對void
包裝類,即使void
是不是一個真正的類型。
而你必須返回類型爲Void的結果,你的Callback#call()方法必須返回null。 因此,無論如何您必須返回,您可能會使用布爾值作爲返回類型並返回Boolean.TRUE(或者在布爾值爲false的情況下)。所以它可能會有更好的可讀性。 – user2777500
我想你應該聲明他們Callable<?>
和Future<?>
。然後,您可以按照自己的意願實施它們,包括Callable<Void>
和Future<Void>
。
不行,在OP詢問的情況下不會起作用。 – Anton
Yes.Callable。但是void和Void不兼容,所以你必須從返回Void的包裝方法中調用你的foo()。 –
爲什麼不是Callble和Future ? –
TomF
@TomF爲什麼不能Callable extend T>和Future extends T>? – emory