に私は、ファイルSandbox.javaで、次のクラスがあります。コンパイルは<R>マップの型引数(複数可)を推測することはできません(<?Rを拡張,?スーパーT>機能)いくつかの特定の状況
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「マップの型引数を推論できません(関数)」のエラーが表示されます。
純粋な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を使用しています(現時点ではアップデートはありません)。
Eclipseで同じ準拠フラグを持つ同じバージョンのJavaコンパイラを使用していますか?プロジェクトがどのようにセットアップされたかによって、Eclipseが予期せぬものを使用していることがあります。 – Brick
[関連?](http://stackoverflow.com/q/40740223/1553851) – shmosel
ソースレベルとターゲットレベルを意味しますか?どちらの場合も、1.8。 Eclipseで設定されたコンパイラと同じインスタンスを、純粋なjavacで使用するよりも使用します。だから私はそれがJDTの問題だと考えています。 –