4
這是我的代碼。不兼容類型:謂詞<CAP#1>不能轉換爲謂詞<?超級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);
}
}
我收到錯誤incompatible types: Predicate<CAP#1> cannot be converted to Predicate<? super CAP#2>
。你能幫我解決嗎?爲什麼它顯示這個錯誤?
然後我也改變傳遞參數上面的線爲
Predicate<Integer> pred= x -> x < 10;
allMatch(data, pred);
但仍然面臨着錯誤。
你能解釋一下嗎? – UnKnown
@UnKnown使用通配符「?」作爲值列表的問題是,編譯器不知道哪些類型的元素在'allMatch'方法中。雖然'Predicate'是用於'T's的,這個列表可以包含任何東西:'T''','Object'','Banana''',Minion's ......並且錯誤告訴你'Predicate '不能用來過濾這些值。通過使用'List',您可以向編譯器顯示所有元素都是'T's,'Predicate'可以過濾這些元素。 –