在某些特定情况

时间:2017-02-16 21:52:04

标签: java eclipse compiler-errors eclipse-neon

我在文件Sandbox.java中有以下类:

package sandbox;

import java.util.Arrays;
import java.util.Collection;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.stream.Collectors;

public class Sandbox {

    public static void main(String[] args) throws Exception {
        ExecutorService executor = Executors.newSingleThreadExecutor();
        Collection<String> s = Arrays.asList(1,2,4,100).stream()
                .map(i -> CompletableFuture
                        .supplyAsync(() -> Wrapper.of(i), executor)
                        .thenApply(d -> d.get().toString())
                        )
                .map(CompletableFuture::join)
                .collect(Collectors.toList());

        executor.shutdown();

        System.out.println(s);
    }
}

class Wrapper<T> {
    T t;

    private Wrapper(T t) {
        this.t = t;
    }

    public T get() {
        return t;
    }

    public static <T> Wrapper<T> of (T t) {
        return new Wrapper<>(t);
    }
}

Eclipse中的编译显示第14行和第34行中的错误;无法推断地图(函数)&#34;的类型参数。

使用纯javac(JDK 1.8.0_121)编译相同的代码没有问题。

如果我将正确的行更改为:

Collection<String> s = Arrays.asList(1,2,4,100).stream()
                .map(i -> CompletableFuture
                        .supplyAsync(() -> Wrapper.of(i), executor)
                        .<String>thenApply(d -> d.get().toString())
                        )
                .map(CompletableFuture::join)
                .collect(Collectors.toList());

然后代码在Eclipse中编译时没有错误。

有谁知道为什么会出现这种行为?这是一个错误吗?

我使用Eclipse 4.6.2.20161208-0625(目前没有发现更新)。

4 个答案:

答案 0 :(得分:6)

我已经确认,这是一个错误:https://bugs.eclipse.org/bugs/show_bug.cgi?id=512486。它已在4.6.3中声明已解决。当稳定释放可用时,我会确认这一点。

答案 1 :(得分:3)

我刚刚使用Eclipse IDE查看Java开发人员版本:Mars Release(4.5.0) 构建ID:20150621-1200,代码对我来说效果很好。它可能已在4.6版本中引入。

答案 2 :(得分:0)

当其中一个参数的类型错误时,我收到此错误。纠正使错误消失

答案 3 :(得分:0)

我最近在 Windows 10 上安装了 STS 4.6.2,虽然这些项目在我的构建路径上链接到了 JDK 11(项目要求),但 IDE 本身无法正确设置它,所以我强制它,通过更改 SpringToolSuite4.ini,在 -vm 行之前添加带有 java 路径的 -vmargs 行,如下所示:

-vm
C:\Program Files\Java\jdk-11.0.6\bin\javaw.exe
-vmargs
...

ps:我意识到这可能是因为一些 java 路径问题,超出了环境变量上下文,我无法弄清楚如何解决 STS 的情况,但在 Eclipse 上没有发生。< /p>