不兼容的类型:谓词<cap#1>无法转换为谓词<! - ?超级CAP#2 - >

时间:2017-10-17 15:58:17

标签: java-8 java-stream predicate

这是我的代码。

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);

但仍面临错误。

1 个答案:

答案 0 :(得分:2)

您应该更改为List<T> list而不是List<?> list