Благодарю. Действительно, это было введено в 4.6.1, скорее всего.

я есть следующие классы в файле 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 «Невозможно определить тип аргумента (ов) для map (Function)».

Тот же код без проблем компилируется с использованием чистого 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 (в данный момент не находит обновлений).

Ответы на вопрос(2)

Ваш ответ на вопрос