#804: IntAggregatedValues.java
projectforge-business/src/main/java/org/projectforge/statistics/IntAggregatedValues.java Statistik-Helfer — konkrete Integer-Aggregation für das Template-Method-Statistik-Framework. Quelle: projectforge-business/src/main/java/org/projectforge/statistics/IntAggregatedValues.java 88 Zeilen · 36 Code · 44 Kommentare · 8 leer
Stellt die drei arithmetischen Operationen bereit, die von
AbstractAggregatedValues (
#802) für den Typ
Integer benötigt werden:
getZero() → 0,
isZero() → Null-oder-Null-Prüfung,
sum() → Integer-Addition. Implementiert
Serializable für die Cache-Speicherung. Wird von Statistik-Buildern verwendet, die Integer-Zähler aggregieren (Zeiterfassungszahlen, Mitarbeiterzahlen usw.).
Template-Method-Pattern
Die Trennung der Aggregationslogik in AbstractAggregatedValues<T> mit drei abstrakten Methoden (getZero, isZero, sum) ist das Template-Method-Pattern. Die Basisklasse kümmert sich um Akkumulation, Min/Max-Verfolgung, Zählererhöhung – alles typunabhängig. Unterklassen stellen nur die drei typspezifischen Operationen bereit. Dies vermeidet die Duplizierung der etwa 60-zeiligen Aggregationslogik für jeden numerischen Typ (BigDecimal, Integer, Long).
Geschwisterklassen
| Klasse | Typ | Dokumentation |
AbstractAggregatedValues<T> | Basis (Template) | #802 |
| IntAggregatedValues | Integer | #804 |
BigDecimalAggregatedValues | BigDecimal | #803 |
Warum nicht generisch?
Java-Generics unterstützen keine arithmetischen Operatoren (+) auf Typparametern – T + T lässt sich nicht kompilieren. Dies erzwingt die drei abstrakten Methoden. Eine Alternative wäre die Verwendung von Number und .intValue() überall, aber das würde die Typsicherheit (Mischen von BigDecimal und Integer in derselben Aggregation) und die Genauigkeit (BigDecimal → int-Kürzung) verlieren. Der Template-Method-Ansatz bewahrt die Typsicherheit auf Kosten einer Unterklasse pro numerischem Typ.
Git-Verlauf
868d6abb7 2025→2026 | 63081666f 2024→2025 | b6092df09 2023→2024 | 9ebb88522 Initialer Commit
Seit dem initialen Commit unverändert – die drei Integer-Operationen sind trivial korrekt und benötigen keine Wartung.