Maison  >  Article  >  Java  >  Quand dois-je utiliser `` vs `` dans les génériques Java ?

Quand dois-je utiliser `` vs `` dans les génériques Java ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-22 13:08:13701parcourir

When Should I Use `` vs. `` in Java Generics?

Les génériques et l'utilisation de vs.

En Java, les génériques permettent des opérations de type sécurisé sur une plus large gamme de types. Cependant, des questions se posent lors du choix entre et dans certains scénarios, comme celui présenté ci-dessous :

Map<String, Class<? extends Serializable>> expected = null;
Map<String, Class<java.util.Date>> result = null;
assertThat(result, is(expected)); 

Ce code ne parvient pas à se compiler en raison du type d'argument incorrect transmis à la méthode assertThat, qui attend un Matcher. Pour comprendre pourquoi cela se produit, nous devons approfondir le concept de covariance dans les types génériques.

La covariance indique qu'un sous-type peut être attribué en toute sécurité à un supertype. En d’autres termes, une classe L'objet peut être affecté à une classe object.

En effet, la covariance ne s'applique qu'au paramètre de type lui-même, pas aux arguments de type qu'il contient. Dans notre exemple, java.util.Date est un sous-type de Serialisable, mais Class n'est pas nécessairement un sous-type de Class.

Changer la signature de la méthode assertThat en Matcher

Cependant, il est important de noter qu'il existe des inconvénients potentiels à l'utilisation de dans ce contexte. Par exemple, cela pourrait entraîner un comportement inattendu ou une sécurité de type réduite dans certains scénarios. En tant que tel, il doit être utilisé judicieusement et avec soin.

Concernant la généricité de la méthode assertThat, elle permet une vérification de type pour s'assurer que le matcher utilisé est compatible avec le type de résultat. Bien que cela n'élimine pas complètement la possibilité d'erreurs d'exécution, cela ajoute un niveau de sécurité en empêchant les correspondances incompatibles.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn