В моем проекте возникла странная проблема. Теперь я упростил задачу и написал небольшой пример здесь, чтобы проиллюстрировать мою растерянность:Что случилось с ключевым словом «супер» в Java generic type
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 Думаю, я неверно истолковал вопрос. Возобновлено. –