Je regarde les caractères génériques et je les ai compris d'une manière très simple. <? extends Type>
quand je les utilise juste pour la lecture (ReturnType) et <? super Type>
quand je l'utilise pour écrire (parameterType)simple utilisation de caractères génériques malentendu
interface P<T> {
boolean eval(T e);
}
public class IsZero implements P<Integer> {
public boolean eval(Integer e) {
return e.intValue() == 0;
}
}
public class QQ<T> {
public void filter(Q<T> q1, Q<T> q2, P<T> p) {
while (!q2.isEmpty()) {
T tmp = q2.remove();
if (p.eval(tmp)) {
q1.add(tmp);
}
}
}
}
Ainsi, ce code donné. Mon professeur a écrit solution suivante:
/*
Q<? super T> q1 just used as a Parametertype for writing (add)
Q<? extends T> q2 just used as a Returntype for reading (remove)
P<? super T> p just used as Parametertype (eval)
*/
Je suis d'accord avec cela, mais je ne peux pas comprendre pourquoi il est P<? super T>
depuis eval retourne un booléen? Ou est-ce que je suis dans l'erreur?
Q super T> parce que q1, q2 et p sont autorisés à contenir des sous-classes d'entier et pas seulement entier lui-même ... dans le cas de T = entier. – Wietlol
Désolé, pas les sous-classes mais les parents: D – Wietlol