2017-02-16 35 views
4

に私は、ファイル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を使用しています(現時点ではアップデートはありません)。

+1

Eclipseで同じ準拠フラグを持つ同じバージョンのJavaコンパイラを使用していますか?プロジェクトがどのようにセットアップされたかによって、Eclipseが予期せぬものを使用していることがあります。 – Brick

+1

[関連?](http://stackoverflow.com/q/40740223/1553851) – shmosel

+0

ソースレベルとターゲットレベルを意味しますか?どちらの場合も、1.8。 Eclipseで設定されたコンパイラと同じインスタンスを、純粋なjavacで使用するよりも使用します。だから私はそれがJDTの問題だと考えています。 –

答えて

2

Eclipse IDE for Java Developersバージョン:Marsリリース(4.5.0) ビルドID:20150621-1200とコードがうまくいきました。これは4.6バージョンで導入された可能性があります。

+0

ありがとうございます。実際、4.6.1で導入されている可能性が最も高いです。 –

関連する問題