4
Hier ist mein Code.inkompatible Typen: Prädikat <CAP#1> kann nicht in Prädikat <konvertiert werden? Super CAP # 2>
import java.util.stream.Stream;
import java.util.List;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.function.Predicate;
public class StreamMethod{
public static void main(String... args){
List<Integer> data = new ArrayList<Integer>(Arrays.asList(1,2,3,4,5,6,7,8));
allMatch(data, x -> x < 10);
}
public static <T> void allMatch(List<?> list, Predicate<? super T> predicate){
boolean allSatisfy = list.stream().allMatch(predicate);
System.out.println(allSatisfy);
}
}
Ich erhalte den Fehler incompatible types: Predicate<CAP#1> cannot be converted to Predicate<? super CAP#2>
. Kannst du mir helfen, es zu lösen? und warum zeigt es diesen Fehler?
ändere ich dann auch die obigen Zeilen vorbei Argumente als
Predicate<Integer> pred= x -> x < 10;
allMatch(data, pred);
Aber immer noch den Fehler gegenüber.
Können Sie erklären, es bitte? – UnKnown
@UnKnown Das Problem bei der Verwendung des Platzhalters '?' Für die Werteliste ist, dass der Compiler nicht weiß, um welchen Typ sich die Elemente in Ihrer 'allMatch'-Methode handelt. Während das 'Prädikat' für' T's ist, könnte die Liste alles enthalten: 'T's,' Objekt's, 'Banana's,' Minion's ... Und der Fehler sagt dir das 'Prädikat 'kann nicht zum Filtern dieser Werte verwendet werden. Mit 'List' zeigen Sie dem Compiler, dass alle Elemente 'T' sind, und das' Prädikat' kann diese filtern. –