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>
?