Question

Puisque les génériques ne sont vérifiées au cours de la compilation avec Java 5, peuvent-ils éviter ClassCastExceptions dans tous les situations?

Était-ce utile?

La solution

Tout d'abord, vous devez vous assurer que votre code compile sans avertissement unckeched. C'est un bon indicateur. Pour comprendre pourquoi, je vous suggère de jeter un oeil à la pour les génériques de Effective Java .

Deuxièmement, les génériques ne peut pas vous protéger du code tel que:

public void methodOne(Integer argument)  {
     methodTwo(argument);
} 

public void methodTwo(Object argument) {
     System.out.println(((Date) argument).getTime());
}

tiers de tous, si vous êtes une manière ou d'une autre classe de jouer avec chargeurs, vous pourriez obtenir ClassCastExceptions étrange, comme dans ce fil de discussion . Il est abrutissante pour voir

  

java.lang.ClassCastException: javax.mail.Session ne peut pas être jeté à   javax.mail.Session

Donc, la réponse est non, vous ne pouvez pas se débarrasser de ClassCastExceptions juste en utilisant correctement génériques .

Autres conseils

La garantie « fonte » que Java 5 génériques offre est que vous ne verrez jamais un ClassCastException des moulages insérés par le compilateur fourni que la compilation a produit aucun avertissement « non vérifiées ».

Dans la vraie vie, vous ne pouvez pas souvent éviter les avertissements incontrôlées si votre code utilise des bibliothèques existantes (non generified). Ensuite, les moulages générés par le compilateur peut jeter ClassCastException, et il est de votre devoir d'empêcher cela en veillant à ce que les valeurs renvoyées par le code bibliothèque sont bien typés pour vos déclarations.

Dans le cas contraire, la situation est inchangée. En dehors des génériques, si vous lancez un type incompatible, vous aurez un ClassCastException la même manière que vous avez toujours fait.

(une bonne référence pour cela et d'autres génériques questions est Java Génériques et collections .)

Non. L'utilisation de type Java 5.0 et génériques ne vous rend pas ClassCastException-preuve.

Non. génériques vous enregistrer seulement des erreurs de compilation, pas pendant la durée des exceptions.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top