Ich verstehe nicht, warum Raw-Typ Predicate
Kompilierungsfehler verursacht, selbst wenn ich eine Art Besetzung habe. Schauen wir uns das folgende Beispiel aussehen:Rohtyp-Prädikat verursacht Kompilierungsfehler
Aus einer Liste mit verschiedenen Objekten diejenigen erhalten, die Number
verlängern, gegossen in eine Number
und sammeln zu einem 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());
Lassen Sie uns das Gleiche tun, aber diesmal wollen wir werfen Number.class::isInstance
-Predicate
:
Dies führt zu einem Übersetzungsfehler:
Error:(28, 25) java: incompatible types: java.lang.Object cannot be converted to java.util.List
Es ist eine Besetzung nach einer filter
Betrieb .map(Number.class::cast)
und .collect(Collectors.toList());
Aber der letzte Typ ist java.lang.Object
. Warum denken Sie, der Ergebnistyp ist java.lang.Object
und nicht ein List<Number>
?