Je suis passé par ces sujets
Cependant, j'ai toujours semblent être un peu perdu avec super
mot-clé:
-
Lors de la déclaration d'une collection comme ça:
List<? super Number> list = null; list.add(new Integer(0));//this compiles list.add(new Object());//this doesn't compile
ne devrait-elle pas être l'opposé, nous avons une liste qui contient des objets de type inconnu) qui sont les parents de
Number
. Donc,Object
doit s'adapter (puisqu'il est le parent de l'Number
), etInteger
ne le sont pas. Le contraire est le cas pour certaines raisons. -
Si nous avons le code suivant
static void test(List<? super Number> param) { param.add(new Integer(2)); } public static void main(String[] args) { ArrayList<String> sList = new ArrayList<String>(); test(sList); //will never compile, however... }
Il est impossible de compiler le code ci-dessus (et de ma santé mentale suggère que c'est le bon comportement), mais la logique de base pourrait prouver le contraire:
String is Object, Object is superclass of Number. So String should work.
Je sais que c'est fou, mais n'est-ce pas la raison pour laquelle ils n'ont pas autoriser
<S super T>
constructions? Si oui, alors pourquoi<? super T>
est-elle autorisée?
Quelqu'un pourrait-il m'aider à restaurer la partie manquante de cette logique de la chaîne?