Tôi gặp phải sự cố lạ trong dự án của mình. Bây giờ tôi đã đơn giản hóa vấn đề và viết một ví dụ nhỏ ở đây để minh họa cho sự nhầm lẫn của tôi:Điều gì xảy ra với từ khóa "siêu" trong loại Java chung
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!
}
}
Mục tiêu của tôi là làm cho phương pháp này f(In<? super List<? super Q2>>)
linh hoạt hơn. Tôi có thể vượt qua in1
hoặc in2
cho phương pháp. Nhưng không thể vượt qua được! Chuyện gì thế?
Có thể this answer sẽ có ý nghĩa. Nhưng câu hỏi của tôi thì khác !!! Loại chung của tôi là In<? super List<? super Q2>>
, loại chung trong một loại chung.
@AndyTurner "mọi thứ phù hợp? Siêu Q2" vậy tại sao 'question.f (in1)' là lỗi? bạn có thể rõ ràng hơn không? – Jerry06
@ Jerry06 Tôi nghĩ tôi đã hiểu sai câu hỏi. Đã mở lại. –