내 프로젝트에서 이상한 문제가 발생했습니다. 지금은 문제를 단순화하고 내 혼란을 설명하기 위해 여기 작은 예제를 작성 :Java 제네릭 유형의 "super"키워드의 문제점
public class Question {
class Q1 {}
class Q2 extends Q1 {}
interface In<T> {
void f(T t);
}
List<Q2> list;
void f(In<? super List<? super Q2>> in) {
in.f(list);
}
static void g() {
Question question = new Question();
In<Collection<Q1>> in1 = new In<Collection<Q1>>() {
@Override
public void f(Collection<Q1> o) {}
};
In<List<Q2>> in2 = new In<List<Q2>>() {
@Override
public void f(List<Q2> o) {}
};
question.f(in1); //Error!
question.f(in2); //Error!
}
}
내 목표는 방법은 f(In<? super List<? super Q2>>)
더 유연하게하는 것입니다. 메서드에 in1
또는 in2
을 전달할 수 있습니다. 그러나 어느 쪽도 통과 될 수 없다! 뭐가 잘못 되었 니?
아마도 this answer이 약간의 의미가 있습니다. 하지만 내 질문은 다릅니다! 제네릭 유형은 In<? super List<? super Q2>>
이며 제네릭 유형의 제네릭 유형입니다.
@AndyTurner "모든 것이 일치합니까? super Q2"그렇다면 왜 question.f (in1)이 오류입니까? 더 이상 정리할 수 있습니까? – Jerry06
@ Jerry06 질문을 잘못 해석 한 것 같습니다. 재개 됐어. –