这些代码行
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
答案 0 :(得分:4)
首先,您应该确保这不是语法错误。 将代码更改为如下所示:
x -> ((String) x).substring(0,1)
除了确保使用完全兼容Java 8的Eclipse版本之外,还应检查是否允许Eclipse使用Java 8语言功能。
如果您没有指定正确版本的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将会让所有人高兴。