Ich stieß auf ein seltsames Problem in meinem Projekt. Nun habe ich das Problem vereinfacht und geschrieben hier ein kleines Beispiel meine Verwirrung zu veranschaulichen:Was ist falsch mit dem Schlüsselwort "super" in Java generischen Typ
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!
}
}
Mein Ziel ist die Methode f(In<? super List<? super Q2>>)
flexibler zu machen. Ich kann in1
oder in2
an die Methode übergeben. Aber beides kann nicht bestanden werden! Was ist falsch?
Vielleicht this answer wird Sinn machen. Aber meine Frage ist anders !!! Mein generischer Typ ist In<? super List<? super Q2>>
, ein generischer Typ innerhalb eines generischen Typs.
@AndyTurner "alles passt? Super Q2" also warum 'question.f (in1)' ist ein Fehler? Kannst du mehr klären? – Jerry06
@ Jerry06 Ich glaube, ich habe die Frage falsch interpretiert. Wieder geöffnet. –