AbstractAggregatedValues.javaEine generische abstrakte Basisklasse zur Akkumulation aggregierter Werte über die Zeit. Wird vom Statistikmodul und speziell von LiquidityForecast für gewichtete Durchschnittsberechnungen von Zahlungszeitpunkten verwendet. Unterklassen (IntAggregatedValues, BigDecimalAggregatedValues) stellen typspezifische Implementierungen bereit.
Der generische Parameter <T> ermöglicht arithmetische Operationen auf jedem numerischen Typ ohne Code-Duplizierung. Die Klasse speichert zwei parallele LinkedLists – eine für Werte, eine für Gewichte – und ermöglicht so sowohl einfache Durchschnitte als auch gewichtete Durchschnitte auf demselben Datensatz.
Die Klasse implementiert das Schablonenmethoden-Muster. Kernalgorithmen (getAverage(), getWeightedAverage()) sind in der abstrakten Klasse definiert, während typspezifische Arithmetik über sechs abstrakte Methoden an Unterklassen delegiert wird:
| Abstrakte Methode | Zweck |
|---|---|
getZero() | Gibt das additive Neutrum für Typ T zurück (z. B. 0 oder BigDecimal.ZERO) |
sum(T, T) | Addiert zwei Werte des Typs T |
convert(int) | Wandelt eine int-Zählung in Typ T für die Division um |
divide(T, T) | Dividiert Summe durch Anzahl/Gewicht |
multiply(T, T) | Multipliziert Wert mit Gewicht (für gewichteten Durchschnitt) |
isZero(T) | Prüft, ob ein Wert Null ist (Schutz vor Division durch Null) |
Sowohl die Ergebnisse von average als auch von weightedAverage werden verzögert berechnet und mithilfe eines Dirty-Flag-Musters zwischengespeichert. Zwei boolesche Felder (averageDirty, weightedAverageDirty) verfolgen, ob der zwischengespeicherte Wert veraltet ist. Ein Aufruf von add() setzt beide Dirty-Flags auf true. Die zwischengespeicherten Werte werden nur neu berechnet, wenn getAverage() oder getWeightedAverage() aufgerufen wird und das entsprechende Dirty-Flag gesetzt ist.
Diese Optimierung vermeidet die Neuberechnung von Durchschnitten bei jeder Hinzufügung, was wichtig ist, wenn viele Werte nacheinander hinzugefügt werden, bevor der Durchschnitt abgefragt wird.
Beide Überladungen von add() sowie clear() geben this zurück, was eine fließende Verkettung ermöglicht:
aggregatedValues.add(val1).add(val2, weight2).add(val3).getWeightedAverage();
In LiquidityForecast wird diese Klasse verwendet, um die gewichtete durchschnittliche Zahlungszeit über mehrere Rechnungspositionen zu berechnen. Jede Position liefert einen Wert (Betrag) und ein Gewicht (Tage bis zur Zahlung). Der gewichtete Durchschnitt ergibt eine einzige repräsentative Zahlungszeit für die Prognose.
868d6abb7 2025 -> 2026 63081666f Quellcodedatei-Header: 2024 -> 2025. b6092df09 Copyright 2023 -> 2024 ab45d51fa Copyright 2001-2022 -> 2001-2023. 5f7ef41b8 Copyright 2021 -> 2022 ceb63e8a1 Quellcode-Header: (C) 2001-2021. 7c79f1922 Copyright des Quellcode-Headers -> 2020. 73a9755df Codebereinigung: zusammengelegte Catch-Blöcke, Diamant-Operator, StringBuilder, list.sort 000ca723d Entferne sinnlose boolesche Ausdrücke (Business) dd5ca38ac CopyRight aller Java-Datei-Header aktualisiert oder erstellt.