2013-08-29 15 views
16

Supponiamo che mi piacerebbe correre metodo statico foo in modo asincronoCome dichiarare Callable per eseguire la funzione return void in Java?

void foo() throws Exception {...} 

Dal foo genera un'eccezione io preferirei creare una Callable e invocare ExecutorService.submit con esso per ottenere un Future.

Ora mi chiedo come dichiarare quelli Callable e Future correttamente. Devo dichiararli

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

Sì.Callabile . Ma void non è compatibile con Void, quindi devi chiamare il tuo foo() da un metodo wrapper che restituisce Void. –

+0

Why not Callble e Future ? – TomF

+0

@ TomF perché non chiamabile e futuro ? – emory

risposta

22

Devo dichiararli Callable<Void> e Future<Void>?

Sì.

Void è simile alle classi wrapper Integer, Long ecc per i tipi primitivi int, long ecc Si potrebbe dire che è una classe wrapper per void, anche se void non è davvero un tipo.

+1

E poiché devi restituire un risultato di tipo Void, il tuo metodo Callback # call() deve restituire null. E quindi, come si deve comunque restituire, è possibile utilizzare Booleano come tipo restituito e restituire Boolean.TRUE (o in caso di errore Boolean.FALSE). Quindi potrebbe avere una migliore leggibilità. – user2777500

2

Penso che dovresti dichiararli Callable<?> e Future<?>. Quindi è possibile implementarli comunque, tra cui Callable<Void> e Future<Void>.

+0

No, non funzionerà nella situazione richiesta dall'OP. – Anton