Java: sécurité de Type - case à cocher en fonte
Voici mon code:
Object[] data = GeneComparison.readData(files);
MyGenome genome = (MyGenome) data[0];
LinkedList<Species> breeds = (LinkedList<Species>) data[1];
Il donne cet avertissement pour la LinkedList:
Type safety: Unchecked cast from Object to LinkedList<Species>
Pourquoi faut-il se plaindre de la liste, et pas MyGenome?
OriginalL'auteur Nick Heiner | 2009-09-29
Vous devez vous connecter pour publier un commentaire.
Parce que ici:
Vous n'êtes pas l'utilisation de génériques
Et ici
Vous les utilisez.
C'est juste un avertissement, on mélange les types dans le tableau de données. Si vous savez ce que vous faites ( je veux dire, si le deuxième élément contient un LinkedList ), vous pouvez ignorer l'avertissement.
Mais le mieux serait d'avoir un objet comme ceci:
Et ont des méthodes de retour bonne choses, avant une conversion correcte si vous vous retrouvez avec:
À l'intérieur de ces méthodes que vous avez à faire le bon transformations.
OriginalL'auteur OscarRyz
Java se plaint comme ça, quand vous lancez un non paramétrée type (Objet) à un type paramétré (LinkedList). C'est pour vous dire que cela pourrait être n'importe quoi. C'est vraiment pas différent de la première conversion à l'exception de la première va générer une ClassCastException si ce n'est pas que le type, mais le deuxième ne sera pas.
Il s'agit de type de l'effacement. Une LinkedList au moment de l'exécution est vraiment juste une LinkedList. Vous pouvez mettre n'importe quoi et de ne pas générer une ClassCastException comme le premier exemple.
Souvent pour se débarrasser de cet avertissement que vous avez à faire quelque chose comme:
où queryForList() retourne une Liste (non paramétrable) où vous savez que le contenu sera de classe quelque Chose.
L'autre aspect est que les tableaux en Java sont covariante, ce qui signifie qu'ils conservent runtime type d'informations. Par exemple:
va lancer une exception. Mais:
est parfaitement légal.
OriginalL'auteur cletus