#804: IntAggregatedValues.java
projectforge-business/src/main/java/org/projectforge/statistics/IntAggregatedValues.java Вспомогательный класс для статистики — конкретная агрегация Integer для фреймворка статистики на основе шаблонного метода. Исходник: projectforge-business/src/main/java/org/projectforge/statistics/IntAggregatedValues.java 88 строк · 36 кода · 44 комментария · 8 пустых
Предоставляет три арифметические операции, необходимые
AbstractAggregatedValues (
#802) для типа
Integer:
getZero() → 0,
isZero() → проверка на null/ноль,
sum() → целочисленное сложение. Реализует
Serializable для хранения в кеше. Используется построителями статистики, которые агрегируют целочисленные счётчики (количество учётных записей времени, количество сотрудников и т.д.).
Шаблонный метод (Template Method)
Разделение логики агрегации на AbstractAggregatedValues<T> с тремя абстрактными методами (getZero, isZero, sum) представляет собой паттерн Template Method. Базовый класс обрабатывает накопление, отслеживание минимума/максимума, увеличение счётчика — всё типонезависимым образом. Подклассы предоставляют только три операции, специфичные для типа. Это позволяет избежать дублирования ~60-строчной логики агрегации для каждого числового типа (BigDecimal, Integer, Long).
Родственные классы
| Класс | Тип | Документация |
AbstractAggregatedValues<T> | Базовый (шаблон) | #802 |
| IntAggregatedValues | Integer | #804 |
BigDecimalAggregatedValues | BigDecimal | #803 |
Почему не обобщённый (generic) подход?
Дженерики Java не поддерживают арифметические операторы (+) для параметров типа — T + T не компилируется. Это вынуждает использовать три абстрактных метода. Альтернативой было бы повсеместное применение Number и .intValue(), но это привело бы к потере типобезопасности (смешивание BigDecimal и Integer в одной агрегации) и точности (усечение BigDecimal → int). Подход с шаблонным методом сохраняет типобезопасность ценой одного подкласса на каждый числовой тип.
История Git
868d6abb7 2025→2026 | 63081666f 2024→2025 | b6092df09 2023→2024 | 9ebb88522 Первоначальный коммит
Не изменялся с момента первоначального коммита — три целочисленные операции тривиально корректны и не требуют поддержки.