2013-08-29 72 views
16

Giả sử tôi muốn chạy phương pháp tĩnh foo không đồng bộLàm thế nào để khai báo Callable để thực thi hàm trả về void trong Java?

void foo() throws Exception {...} 

Kể từ foo ném một ngoại lệ Tôi muốn tạo ra một Callable và gọi ExecutorService.submit với nó để có được một Future.

Bây giờ tôi tự hỏi làm thế nào để khai báo những số CallableFuture đúng cách. Tôi có nên tuyên bố họ

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

Có.Callable . Nhưng void không tương thích với Void, vì vậy bạn phải gọi hàm foo() của bạn từ một phương thức wrapper trả về Void. –

+0

Tại sao không Callble và Tương lai ? – TomF

+0

@TomF tại sao không gọi và Tương lai ? – emory

Trả lời

22

Tôi có nên tuyên bố họ Callable<Void>Future<Void>?

Có.

Void cũng tương tự như các lớp wrapper Integer, Long vv cho các loại nguyên thủy int, long vv Bạn có thể nói đó là một lớp wrapper cho void, mặc dù void là không thực sự là một loại.

+1

Và khi bạn phải trả lại kết quả kiểu Void, phương thức Callback # call() của bạn phải trả về giá trị rỗng. Và do đó, như bạn vẫn phải quay trở lại, bạn có thể sử dụng Boolean làm kiểu trả về và trả về Boolean.TRUE (hoặc trong trường hợp lỗi Boolean.FALSE). Vì vậy, nó chỉ có thể có khả năng đọc tốt hơn. – user2777500

2

Tôi nghĩ bạn nên khai báo chúng Callable<?>Future<?>. Sau đó, bạn có thể triển khai chúng bất kỳ cách nào bạn muốn bao gồm Callable<Void>Future<Void>.

+0

Không, nó sẽ không hoạt động trong tình huống mà OP hỏi. – Anton

Các vấn đề liên quan