代码段是这样的:
package test;
import java.util.Collection;
import java.util.LinkedList;
import java.util.concurrent.*;
public class Test {
public static void main(String[] args) {
Callable<?> callable;
final ExecutorService someExecutor = null;
Collection<Callable<?>> tasks = new LinkedList<Callable<?>>();
int timeoutInSeconds = 10;
try {
for (Future<?> f : someExecutor.invokeAll(
(Collection<? extends Callable<Callable<?>>>) tasks,
timeoutInSeconds, TimeUnit.SECONDS)) {
f.get();
}
} catch (java.util.concurrent.CancellationException e) {
} catch (Exception e) {
e.printStackTrace();
}
}
}
从命令行编译时
javac Test.java
我收到以下错误:
Test.java:17: inconvertible types
found : java.util.Collection<java.util.concurrent.Callable<?>>
required: java.util.Collection<? extends java.util.concurrent.Callable<java.util.concurrent.Callable<?>>>
(Collection<? extends Callable<Callable<?>>>) tasks,
^
当我使用IDEA或Netbeans编译时,我也会遇到同样的错误。 但是 eclipse认为每个方面都可以正常运行。我三重检查所有3个使用相同的JDK(1.6u45)。那么eclipse有什么不同呢?
答案 0 :(得分:1)
Eclipse使用自己的Java compiler ECJ,有时行为与javac
不同。
答案 1 :(得分:0)
如果在eclipse.ini中使用-vm选项指定JVM,那么eclipse是否具有相同的行为?这不起作用。
尝试导航至Preferences-&gt; Java-&gt; Compiler-&gt;错误/警告,在右侧面板中,搜索“未经检查的通用类型操作”,将级别从“忽略”设置为“错误”。重建后,您将获得相同的结果。