同一个JDK上的相同代码在Eclipse上编译但在Netbeans,IDEA或命令行

时间:2016-01-05 09:36:29

标签: java eclipse generics netbeans javac

代码段是这样的:

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有什么不同呢?

2 个答案:

答案 0 :(得分:1)

Eclipse使用自己的Java compiler ECJ,有时行为与javac不同。

答案 1 :(得分:0)

如果在eclipse.ini中使用-vm选项指定JVM,那么eclipse是否具有相同的行为?这不起作用。

尝试导航至Preferences-&gt; Java-&gt; Compiler-&gt;错误/警告,在右侧面板中,搜索“未经检查的通用类型操作”,将级别从“忽略”设置为“错误”。重建后,您将获得相同的结果。