2
生の型Predicate
が型キャストを持っていてもコンパイルエラーが発生する理由を理解できません。以下の例を見てみましょう:生の型述語でコンパイルエラーが発生する
Number
に拡張されたものを取得し、Number
にキャストし、List
に収集します。
List<Object> objectList = Arrays.asList(1, 3.4, 2, new Object(), "");
List<Number> numbers = objectList
.stream()
.filter(Number.class::isInstance)
.map(Number.class::cast)
.collect(Collectors.toList());
のは、同じことをやってみましょうが、今回はのは、キャストせNumber.class::isInstance
Predicate
へ:
これはコンパイルエラーにつながる:
Error:(28, 25) java: incompatible types: java.lang.Object cannot be converted to java.util.List
filter
後のキャストがあります操作.map(Number.class::cast)
と.collect(Collectors.toList());
最終的なタイプはjava.lang.Object
です。結果のタイプがjava.lang.Object
で、List<Number>
ではないと思われるのはなぜですか?