EN · DE · RU · FR · ES

#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

KlasseTypDokumentation
AbstractAggregatedValues<T>Basis (Template)#802
IntAggregatedValuesInteger#804
BigDecimalAggregatedValuesBigDecimal#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.