Ho riscontrato uno strano problema nel mio progetto. Ora ho semplificato il problema e scritto un piccolo esempio per illustrare la mia confusione:Cosa c'è di sbagliato con la parola chiave "super" in Java tipo generico
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!
}
}
Il mio obiettivo è quello di rendere il metodo f(In<? super List<? super Q2>>)
più flessibile. Posso passare al metodo in1
o in2
. Ma nessuno dei due può essere passato! Che c'è?
Forse this answer avrà un senso. Ma la mia domanda è diversa !!! Il mio tipo generico è In<? super List<? super Q2>>
, un tipo generico all'interno di un tipo generico.
@AndyTurner "tutto corrisponde? Super Q2" quindi perché 'question.f (in1)' è un errore? puoi cancellare di più? – Jerry06
@ Jerry06 Penso di aver interpretato male la domanda. Riaperto. –