有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    Eclipse编译器并不完美。有时您会遇到诸如this之类的问题。例如,当前有两个与flatMap和类型干扰相关的bug-482664502158

    如果您认为代码是合法的,而javac编译代码时没有问题,那么您应该打开一个bug并在那里发布一个代码片段,以便让他们知道它。这有助于改进编译器