2017-08-24 12 views
1

キャストを使用するときにオブジェクトを収集することができないJava 8の問題が発生しています。キャストとラムダを使用して収集

definitions.stream() 
      .map(Definition.class::cast) 
      .map((Definition definition) -> { 
       WonderfulDefinition wd = new WonderfulDefinition(); 
       wd.name(definition.getName()); 
       //etc 
       return wd; 
      }).collect(Collectors.toList()) 

そして、私はコンパイラエラーを取得しています:

Error:(71, 23) java: incompatible types: inference variable T has incompatible bounds equality constraints: java.util.List lower bounds: java.lang.Object

任意の助けをいただければ幸いです。

更新日:

import java.util.*; 
import java.util.stream.*; 

class Driver { 
    public static void main(String[] args) { 
     List definitions = new ArrayList<>(); 
     definitions.add(new Definition()); 
     definitions.add(new Definition()); 

     List<WonderfulDefinition> list = 
       definitions.stream() 
         .map(Definition.class::cast) 
         .map((Definition definition) -> { 
          WonderfulDefinition wd = new WonderfulDefinition(); 
          wd.name(definition.getName()); 
          //etc 
          return wd; 
         }).collect(Collectors.toList()); 

     System.out.println(list); 
    } 
} 
class Definition { 
    private String name; 

    public String getName() { 
     return name; 
    } 
    public void name(String name) { 
     this.name = name; 
    } 
} 
class WonderfulDefinition extends Definition { 
} 
+1

あなたの最初の '' definitions''リストが含まれていますどのようなタイプ:?

((List<Object>) definitions).stream() .map(Definition.class::cast) .map(definition -> { WonderfulDefinition wd = new WonderfulDefinition(); wd.name(definition.getName()); //etc return wd; }).collect(Collectors.toList()); 

はこのような何かが完全に有効であることに留意してください –

+0

残念ながらオブジェクト。これは、型なしのListとして定義を返すサードパーティのlibから来ています。 dictionary.getDefinitions()はリストを返します – CoffeeIsProgramming

+0

List変数にはどのような型がありますか?それはリストの他の言及がないので、おそらくその部分をマークします。 –

答えて

3

問題は、あなたのListが型なしであるということです。この場合、単純にキャストを実行することにより、コンパイラにヒント:

List definitions = Arrays.asList(new Definition()); 
List<Object> d = definitions; 
+0

@ CoffeeIsProgramming用意されている例を使ってテストしました。うまく動作します –

+0

謝罪、あなたは正しいです。ありがとうございました :) – CoffeeIsProgramming

関連する問題