我写了下面的代码时,你得到一个编译错误:我使用泛型
public void test() {
Callable<?> myCall = new Callable() {
@Override
public String call() throws Exception {
return doDomething();
}
};
Callable<?> myCall2 = new Callable() {
@Override
public String call() throws Exception {
return doDomething2();
}
};
ExecutorService executor = Executors.newFixedThreadPool(2);
List<Future<?>> futuresList = executor.invokeAll((Collection<? extends Callable<?>>) getList());
String result1 = futuresList.get(0).get();
String result2 = futuresList.get(0).get();
...
...
}
private List<Callable<?>> getList() {
.. create callables with wildcard and return them
}
我碰到下面的编译错误:该方法的invokeAll(集>)在类型的ExecutorService是不适用的参数(集>)。
编辑 我添加了一个getList方法,因为我想这样使用泛型而不是String。 我想了解为什么它不编译。在我真正的程序中它是一种方法。
我编辑了我的问题。我知道在这个例子中我可以使用String。但我真正的程序更通用。我需要使用通配符。 – AAaa
我又增加了一个例子。这个例子包含了一个演员,如果你一直都是泛型演员,那么这个演员不是必需的。但是,我发现自己需要时不时的演员,也许有人提示如何优化这个例子。 –
谢谢。我是否理解正确,我们需要在这里使用泛型,没有通配符,只是因为invokeAll方法是用泛型写的而不是通配符? – AAaa