Commençons avec la question 2 en premier et ensuite revenir à la question 1:
Question 2:
>
ArrayList[] pl2 = new ArrayList[10];
ArrayList[] pl3 = new ArrayList[10];
Quelle est la différence dans la mesure où la référence de la déclaration de p12 et
p13 est concerné?
Dans pl2 assure une meilleure sécurité de type de p13.
Si je vous écris pour pl2:
pl2[0]=new ArrayList<String>();
il va me donner un compilateur message d'erreur indiquant "impossible de convertir de ArrayList<String>
de ArrayList<Integer>
"
Ainsi, il s'assure de la compilation de la sécurité.
Cependant, si j'écris pour p13
pl3[0]=new ArrayList<String>();
pl3[1]=new ArrayList<Integer>();
il ne sera pas jeter toute erreur et il incombe au développeur de code et de vérifier correctement lors de l'extraction de données à partir de p13, afin d'éviter tout dangereux de conversion de type en cours d'exécution.
Question 1:
C'est juste sans doute la façon dont les génériques de travail. Pendant l'initialisation de tableau, ArrayList<Integer>[] pl2 = new ArrayList[10]
, la gauche, ArrayList<Integer>[] pl2
, permettra d'assurer la sécurité de type uniquement lors de l'initialisation de l'objet ArrayList dans la position de l'index:
pl2[0]=new ArrayList<Integer>();
Le côté droit de la principale déclaration de tableau = new ArrayList[10]
s'assure juste que la position de l'index tiendra les éléments de type ArrayList. Voir également le type d'effacement des concepts de Type Effacement pour plus d'informations.