Voici quelques notes sur les implémentations utilisant Generics.
Si vous déclarez normalement quelque chose qui spécifie des génériques, il a tendance à être redondant, donc si vous souhaitez générer un tel objet plusieurs fois, je pense qu'il est préférable de créer une fonction de génération dans la classe Util.
Exemple d'implémentation
//Une fonction qui renvoie une liste correspondant à la classe
<T> List<T> generateList(Class<T> clazz) {
return new ArrayList<>();
}
//Une fonction qui renvoie un BeanPropertyRowMapper qui correspond à la classe
<T> BeanPropertyRowMapper<T> getBeanPropertyRowMapper(Class<T> clazz) {
return new BeanPropertyRowMapper<>(clazz);
}
Exemple d'utilisation
//Il est redondant d'écrire comme ça
new BeanPropertyRowMapper<Something>(Something.class);
//C'est plus facile à lire si vous écrivez comme ça
Util.getBeanPropertyRowMapper(Something.class);
Dans le cas de "utiliser un type qui prend des génériques, mais le type du contenu n'a pas d'importance", simplement omettre le type donnera un avertissement.
Exemple d'avertissement
//Vérification en double à l'aide d'un jeu de hachage
boolean checkForDuplicate(List list) {
return list.size() == new HashSet(list).size();
}
Dans de tels cas, vous pouvez écrire <?>
Et l'opérateur diamant pour éviter les avertissements.
Exemple d'implémentation
//Vérification en double à l'aide d'un jeu de hachage
boolean checkForDuplicate(List<?> list) {
return list.size() == new HashSet<>(list).size();
}
Vous pouvez l'écrire en le spécifiant avec «
Exemple d'implémentation redondante
//Vérification en double à l'aide d'un jeu de hachage
<T> boolean checkForDuplicate(List<T> list) {
return list.size() == new HashSet<>(list).size();
}
Même lors de l'exécution d'un traitement Stream
avec List
comme argument, la compilation peut ne pas réussir à moins que<?>
Ne soit écrit.
Exemple que la compilation ne passe pas
BeanPropertySqlParameterSource[] makeParamArray(List entities) {
return entities.stream()
.map(BeanPropertySqlParameterSource::new)
.toArray(BeanPropertySqlParameterSource[]::new);
}
Exemple de compilation
BeanPropertySqlParameterSource[] makeParamArray(List<?> entities) {
return entities.stream()
.map(BeanPropertySqlParameterSource::new)
.toArray(BeanPropertySqlParameterSource[]::new);
}
Recommended Posts