EN · DE · RU · FR · ES

#804: IntAggregatedValues.java

projectforge-business/src/main/java/org/projectforge/statistics/IntAggregatedValues.java Assistant de statistiques — agrégation concrète Integer pour le framework de statistiques basé sur le Template Method. Source : projectforge-business/src/main/java/org/projectforge/statistics/IntAggregatedValues.java 88 lignes · 36 code · 44 commentaires · 8 vides
Fournit les trois opérations arithmétiques nécessaires à AbstractAggregatedValues (#802) pour le type Integer : getZero() → 0, isZero() → vérification null-ou-zéro, sum() → addition d’entiers. Implémente Serializable pour le stockage en cache. Utilisé par les constructeurs de statistiques qui agrègent des compteurs entiers (comptages de feuilles de temps, comptages d’employés, etc.).

Patron Template Method

La séparation de la logique d’agrégation dans AbstractAggregatedValues<T> avec trois méthodes abstraites (getZero, isZero, sum) correspond au patron Template Method. La classe de base gère l’accumulation, le suivi min/max, l’incrémentation du compteur — le tout de manière indépendante du type. Les sous-classes fournissent uniquement les trois opérations spécifiques au type. Cela évite de dupliquer la logique d’agrégation d’environ 60 lignes pour chaque type numérique (BigDecimal, Integer, Long).

Classes sœurs

ClasseTypeDoc
AbstractAggregatedValues<T>Base (template)#802
IntAggregatedValuesInteger#804
BigDecimalAggregatedValuesBigDecimal#803

Pourquoi pas générique ?

Les génériques Java ne supportent pas les opérateurs arithmétiques (+) sur les paramètres de type — T + T ne compile pas. Cela impose les trois méthodes abstraites. Une alternative serait d’utiliser Number et .intValue() partout, mais cela ferait perdre la sécurité de type (mélanger BigDecimal et Integer dans la même agrégation) et la précision (troncature BigDecimal → int). L’approche Template Method préserve la sécurité de type au prix d’une sous-classe par type numérique.

Historique Git

868d6abb7 2025→2026 | 63081666f 2024→2025 | b6092df09 2023→2024 | 9ebb88522 Premier commit
Inchangé depuis le premier commit — les trois opérations sur les entiers sont trivialement correctes et ne nécessitent aucune maintenance.