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);
그러나 여전히 오류에 직면로 통과 인수의 위의 라인을 변경합니다.
당신이 그것을하시기 바랍니다 설명 할 수
List<T> list
대신 변경해야합니까? – UnKnown@UnKnown 값리스트에 와일드 카드'? '를 사용할 때의 문제는 컴파일러가 요소가 여러분의'allMatch' 메소드 안에 어떤 타입인지 알지 못한다는 것입니다. 'Predicate'는'T'를위한 것이지만 목록에는'T'','Object's,'Banana's, Minion's 등의 내용이 포함될 수 있습니다 ... 그리고 오류는'Predicate '는 이러한 값을 필터링하는 데 사용할 수 없습니다. 'List'을 사용하면 모든 요소가'T'가 될 것이라는 컴파일러를 보여주고'Predicate'는 그것들을 필터링 할 수 있습니다. –