2013-08-29 9 views
16

Angenommen, ich möchte statische Methode auszuführen foo asynchronWie Callable deklariert wird, um Funktion auszuführen, die void in Java zurückgibt?

void foo() throws Exception {...} 

Da foo eine Ausnahme auslöst würde ich eine Callable bevorzugen erstellen und rufen ExecutorService.submit mit ihm ein Future zu bekommen.

Jetzt frage ich mich, wie man diese Callable und Future ordnungsgemäß deklariert. Sollte ich erklären ihnen

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

Yes.Callable . Aber void ist nicht kompatibel mit Void, also musst du deine foo() von einer Wrapper-Methode aufrufen, die Void zurückgibt. –

+0

Warum nicht Callble und Future ? – TomF

+0

@TomF warum nicht Callable und Future ? – emory

Antwort

22

Soll ich sie Callable<Void> und Future<Void> erklären?

Ja.

Void ist ähnlich wie die Wrapper-Klassen Integer, Long etc. für die primitiven Typen int, long usw. Man könnte sagen, es ist eine Wrapper-Klasse für void, obwohl void nicht wirklich ein Typ ist.

+1

Und wie Sie ein Ergebnis des Typs Void zurückgeben müssen, muss Ihre Callback # call() -Methode null zurückgeben. Und so, wie Sie sowieso zurückkehren müssen, können Sie Boolean als Rückgabetyp verwenden und Boolean.TRUE zurückgeben (oder im Falle eines Fehlers Boolean.FALSE). Es könnte also besser lesbar sein. – user2777500

2

Ich denke, Sie sollten sie Callable<?> und Future<?> deklarieren. Dann können Sie sie beliebig implementieren, einschließlich und Future<Void>.

+0

Nein, es wird nicht in der Situation funktionieren, die OP gefragt hat. – Anton