Dans la programmation orientée objet, les génériques jouent un rôle crucial dans l'amélioration de la sécurité des types et de la réutilisabilité du code. Dans les génériques Java, l'utilisation de caractères génériques tels que étend T> ; et
Considérez l'exemple suivant utilisant JUnit avec les matchers Hamcrest :
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 d'un inadéquation entre les paramètres de type générique dans la signature de la méthode assertThat et les types réels impliqués.
Pour comprendre pourquoi utiliser étend T> ; résout le problème, approfondissons le concept de covariance. En Java, les tableaux sont covariants, ce qui signifie que si un type T est un sous-type de S, alors les tableaux correspondants T[] et S[] sont également des sous-types.
Dans l'exemple donné, la carte attendue peut contenir instances d'objets Class représentant des sous-classes de Serialisable. D’un autre côté, la carte de résultats ne peut contenir que des objets Class représentant la classe Date. En utilisant extends T>, la méthode assertThat peut accepter des matchers qui vérifient si une valeur est une instance d'une classe qui étend Serialisable, y compris la classe Date.
Le assertThat La méthode dans JUnit est générique pour garantir qu’un correspondant approprié est transmis pour le type de résultat. En le tapant de manière générique
Comprendre la distinction entre étend T> ; et
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!