为什么我可以通过命令行编译这段代码而不是Eclipse编译?

时间:2015-10-16 19:47:25

标签: java eclipse java-8

这些代码行

    System.out.println(
        Stream.of("adam", "bob", "adrian", "brian")
        .collect(
                Collectors.groupingBy(
                        x -> x.substring(0,1),        //1
                        Collectors.joining("-")))
    );
通过命令行使用javac时编译正常,但是当我尝试在Eclipse中编译时出现此错误

  

对于CharSequence

类型,未定义方法substring(int,int)

Eclipse如何干扰编译器? IDE是否只使用javac.exe

我正在使用Eclipse Luna 4.4.1,使用Oracle jdk1.8.0_45

2 个答案:

答案 0 :(得分:4)

首先,您应该确保这不是语法错误。 将代码更改为如下所示:

x -> ((String) x).substring(0,1)

除了确保使用完全兼容Java 8的Eclipse版本之外,还应检查是否允许Eclipse使用Java 8语言功能。

enter image description here

enter image description here

如果您没有指定正确版本的JRE,可以按照此处所述进行更改:How to change JDK version for an Eclipse project

答案 1 :(得分:1)

从4.5里程碑3开始,Eclipse中的问题已得到解决,很可能是通过bug 437444。该更改结合了Java 8发布后对incorporating several JLS changes进行的一些错误修复。

在规范发生变化之前,我们可以讨论这个例子是否真的是合法的Java 8(之前的推论是不允许使用来自嵌套的lambda体的一些信息),但我希望只是更新到Eclipse 4.5.1将会让所有人高兴。