Hier einige Hinweise zu Implementierungen mit Generics.
Wenn Sie etwas deklarieren, das Generika normal angibt, ist es in der Regel redundant. Wenn Sie also ein solches Objekt mehrmals generieren möchten, ist es meiner Meinung nach besser, eine Generierungsfunktion in der Util-Klasse zu erstellen.
Implementierungsbeispiel
//Eine Funktion, die eine der Klasse entsprechende Liste zurückgibt
<T> List<T> generateList(Class<T> clazz) {
return new ArrayList<>();
}
//Eine Funktion, die einen BeanPropertyRowMapper zurückgibt, der der Klasse entspricht
<T> BeanPropertyRowMapper<T> getBeanPropertyRowMapper(Class<T> clazz) {
return new BeanPropertyRowMapper<>(clazz);
}
Anwendungsbeispiel
//Es ist überflüssig, so zu schreiben
new BeanPropertyRowMapper<Something>(Something.class);
//Es ist einfacher zu lesen, wenn Sie so schreiben
Util.getBeanPropertyRowMapper(Something.class);
Im Fall von "Verwenden Sie einen Typ, der Generika verwendet, aber der Typ des Inhalts spielt keine Rolle", wird durch einfaches Weglassen des Typs eine Warnung ausgegeben.
Beispiel für eine Warnung
//Doppelte Prüfung mit Hash-Set
boolean checkForDuplicate(List list) {
return list.size() == new HashSet(list).size();
}
In solchen Fällen können Sie "<?>" Und den Diamantoperator schreiben, um Warnungen zu vermeiden.
Implementierungsbeispiel
//Doppelte Prüfung mit Hash-Set
boolean checkForDuplicate(List<?> list) {
return list.size() == new HashSet<>(list).size();
}
Sie können es schreiben, indem Sie es mit "
Redundantes Implementierungsbeispiel
//Doppelte Prüfung mit Hash-Set
<T> boolean checkForDuplicate(List<T> list) {
return list.size() == new HashSet<>(list).size();
}
Selbst wenn die Stream-Verarbeitung mit List als Argument ausgeführt wird, wird die Kompilierung möglicherweise nicht bestanden, es sei denn, <<>> ist geschrieben.
Beispiel, dass die Kompilierung nicht bestanden wird
BeanPropertySqlParameterSource[] makeParamArray(List entities) {
return entities.stream()
.map(BeanPropertySqlParameterSource::new)
.toArray(BeanPropertySqlParameterSource[]::new);
}
Beispiel für das Kompilieren
BeanPropertySqlParameterSource[] makeParamArray(List<?> entities) {
return entities.stream()
.map(BeanPropertySqlParameterSource::new)
.toArray(BeanPropertySqlParameterSource[]::new);
}
Recommended Posts