我不明白爲什麼這個代碼不會編譯的invokeAll()是不是願意接受一個Collection <Callable<T>>
ExecutorService executor = new ScheduledThreadPoolExecutor(threads);
class DocFeeder implements Callable<Boolean> {....}
...
List<DocFeeder> list = new LinkedList<DocFeeder>();
list.add(new DocFeeder(1));
...
executor.invokeAll(list);
錯誤味精:
The method invokeAll(Collection<Callable<T>>) in the type ExecutorService is
not applicable for the arguments (List<DocFeeder>)
list
是的Collection
DocFeeder
,它實現Callable<Boolean>
- 發生了什麼?
不,*不應*編譯(在Java 5) - 正因爲如此非常變異的問題。基本上泛型的變化不會按照您期望的方式工作,也不應該 - 這會很危險。 – 2008-12-16 09:45:59