EN · DE · RU · FR · ES

#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
IntAggregatedValuesInteger#804
BigDecimalAggregatedValuesBigDecimal#803

Почему не обобщённый (generic) подход?

Дженерики Java не поддерживают арифметические операторы (+) для параметров типа — T + T не компилируется. Это вынуждает использовать три абстрактных метода. Альтернативой было бы повсеместное применение Number и .intValue(), но это привело бы к потере типобезопасности (смешивание BigDecimal и Integer в одной агрегации) и точности (усечение BigDecimal → int). Подход с шаблонным методом сохраняет типобезопасность ценой одного подкласса на каждый числовой тип.

История Git

868d6abb7 2025→2026 | 63081666f 2024→2025 | b6092df09 2023→2024 | 9ebb88522 Первоначальный коммит
Не изменялся с момента первоначального коммита — три целочисленные операции тривиально корректны и не требуют поддержки.