Eclipse无法从Java8流推断正确的类型
以下代码在所有在线java编译器中都可以正常工作,但eclipse会抛出编译器错误。这是eclipse中的一个bug还是我遗漏了一些设置?一个简单的解决方法来消除eclipse?在线:https://ideone.com/l0bbhz注意:这是一个简化的虚构示例,仅针对问题。我理解flatMap
在这种情况下是不必要的。在实际情况中,我真的需要flatMap
package dummy;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import static java.util.stream.Collectors.toList;
public class LearnJava {
public static void main(String[] args) {
String[] sa = {"ne", "two", "three"};
List<String> l = Arrays.stream(sa)
.flatMap(s -> Collections.singleton(s).stream().map(c -> c.toUpperCase()))
.collect(toList());
System.out.println(l.get(0));
}
}
eclipse控制台中出现错误
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
Type mismatch: cannot convert from List<Object> to List<String>
at dummy.LearnJava.main(LearnJava.java:13)
我的eclipse版本:
Eclipse Java EE IDE for Web Developers.
Version: Luna Service Release 2 (4.4.2) Build id: 20150219-0600
更新:我采用了这个小的解决方法。它的工作没有重大重构
.flatMap(s -> Collections.singleton(s).stream().map(c -> c.toUpperCase()))
到
.<String>flatMap(s -> Collections.singleton(s).stream().map(c -> c.toUpperCase()))
# 1 楼答案
Eclipse编译器并不完美。有时您会遇到诸如this之类的问题。例如,当前有两个与
flatMap
和类型干扰相关的bug-482664和502158如果您认为代码是合法的,而javac编译代码时没有问题,那么您应该打开一个bug并在那里发布一个代码片段,以便让他们知道它。这有助于改进编译器