2013-08-29 10 views
16

Załóżmy Chciałbym uruchomić metodę statyczną foo asynchronicznieJak zadeklarować program Callable, aby wykonać funkcję zwracania pustki funkcji w Javie?

void foo() throws Exception {...} 

Od foo zgłasza wyjątek wolałbym stworzyć Callable i powoływania ExecutorService.submit z nim, aby uzyskać Future.

Teraz zastanawiam się, jak prawidłowo oznaczyć te Callable i Future. powinienem zadeklarować je

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

Tak.Callable . Ale void nie jest kompatybilny z Void, więc musisz wywołać funkcję foo() z metody opakowującej zwracającej Void. –

+0

Dlaczego nie zadzwonić pod numer i przyszłość ? – TomF

+0

@ TomF dlaczego nie można wywoływać i Future ? – emory

Odpowiedz

22

powinienem zadeklarować im Callable<Void> i Future<Void>?

Tak.

Void jest podobna do klasy otoki Integer, Long itp dla prymitywnych typów int, long itd. Można powiedzieć, że jest to klasa wrapper dla void, choć void nie jest to typ.

+1

A ponieważ musisz zwrócić wynik typu Void, twoja metoda Callback # call() musi zwrócić wartość null. I tak, jak zresztą i tak musisz zwrócić, możesz użyć Boolean jako typu zwracanego i zwrócić Boolean.TRUE (lub w przypadku błędu Boolean.FALSE). Więc może mieć lepszą czytelność. – user2777500

2

Myślę, że powinieneś zadeklarować je jako Callable<?> i Future<?>. Następnie możesz je wdrożyć w dowolny sposób, w tym Callable<Void> i Future<Void>.

+0

Nie, to nie zadziała w sytuacji, o którą OP zadał. – Anton

Powiązane problemy