Lorsque les tableaux ont été conçus (c'est à dire assez bien quand java a été conçu), les développeurs ont décidé que l'écart serait utile, de sorte qu'ils permettaient. Toutefois, cette décision a été souvent critiqué, car il vous permet de le faire (à supposer qu' NotADataNode
est une autre sous-classe de la Tree
):
DataNode[] a2 = new DataNode[1];
Tree[] b2 = a2; // this is okay
b2[0] = new NotADataNode(); //compiles fine, causes runtime error
Ainsi, lorsque les génériques ont été conçus, il a été décidé, que les structures de données générique ne doit permettre explicite de la variance. I. e. vous ne pouvez pas faire List<Tree> b1 = a1;
, mais vous pouvez le faire List<? extends Tree> b1 = a1;
.
Toutefois, si vous ne l'-ci, essayez d'utiliser l' add
ou set
méthode (ou toute autre méthode qui prend un T
comme argument) provoque une erreur de compilation. De cette manière, il n'est pas possible de faire l'équivalent du tableau ci-dessus problème de compilation (sans dangereux jette).