Maison >Java >javaDidacticiel >Pourquoi la méthode `assertThat` ne parvient-elle pas à se compiler lors de l'utilisation de `Map
Génériques Java : étend T> ; contre
Les génériques Java vous permettent de créer des collections et des méthodes de type sécurisé qui peuvent fonctionner sur une gamme de types de données. Lorsque vous utilisez des génériques, comprendre la différence entre étend T> ; et
Considérons l'exemple suivant :
Map<String, Class<? extends Serializable>> expected = null; Map<String, Class<Date>> result = null; assertThat(result, is(expected));
Cet exemple génère une erreur de compilation avec le message suivant :
Error: cannot find symbol method assertThat(java.util.Map<java.lang.String,java.lang.Class<java.util.Date>>, org.hamcrest.Matcher<java.util.Map<java.lang.String,java.lang.Class<? extends java.io.Serializable>>>)
Pourquoi cette version ne parvient-il pas à compiler ?
La raison réside dans l'utilisation de
Quel est l'inconvénient de changer assertThat en Matcher< ? extends T>?
Changer assertThat en Matcher étend T> ; nous permet de transmettre un Matcher qui correspond à un supertype de T. Bien que cela puisse sembler un simple changement, cela peut conduire à un comportement inattendu. Par exemple, si nous avons un Matcher qui correspond à une liste de chaînes, nous pourrions le transmettre à une méthode qui attend un Matcher pour une liste d'objets. Dans ce cas, Matcher ne serait pas en mesure de faire correspondre correctement le paramètre réel, ce qui pourrait conduire à des résultats incorrects.
Est-il utile de généraliser la méthode assertThat dans JUnit ?
La généralisation de assertThat dans JUnit vise à garantir la sécurité des types et à éviter les inadéquations entre les types attendus et réels. Cependant, comme indiqué ci-dessus, cela peut également entraîner des problèmes potentiels s'il n'est pas utilisé avec précaution.
Recommandation
Lors du choix entre étend T> ; et
En suivant ces recommandations, vous pouvez éviter les erreurs de compilation et garantir la sécurité des types lors de l'utilisation de génériques Java.
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!