Lösung Nr. 3
In den vorhergehenden Lösungen müssen die Konstanten vor main() initialisiert werden. Innerhalb von main() kann eine Konstante nicht initialisiert werden, da sich ihr Wert nicht ändern lässt. Dies ist ein wesentlicher Nachteil, da hierdurch das Properties-Objekt, von dem gelesen wird, vor der Initialisierung der Konstante initialisiert werden muss:
Was aber, wenn alle Konstanten von einer Datei initialisiert werden müssen, deren Name ein Befehlszeilenargument ist? In diesem Fall müssen die Konstanten nach dem Eintritt in main() initialisiert werden. Hierfür wird eine Methode verwendet, die der oben dargestellten ähnlich ist und die folgenden Schritte umfasst:
Jeder Versuch, eine Konstante oder dependent_static vor ihrer Initialisierung zu verwenden, führt zu einer Fehlermeldung. Das ist hilfreich, wenn man vergisst, eine statische Variable als abhängig zu kennzeichnen. Verwendet solch eine Variable eine Laufzeit-Konstante, erkennt man diesen Fehler beim ersten Durchlauf von Listing G.
Zu beachten ist, dass eine durch den Konstruktor einer globalen Variablen verursachte Exception nicht abgefangen werden kann – die Anwendung wird beendet (Listing H). Hier geschieht dies aber nicht, da die globalen Variablen nur innerhalb main() initialisiert werden. Die Initialisierung kann sogar von einem try-catch-Block umgeben und die Anwendung etwas galanter beendet werden, wie in Listing I gezeigt wird.
Ein Blick auf Listing J ergibt, dass nun eine neue abhängige statische s_dbConnection besteht. Zu beachten sind die beiden Property-Dateien: props.txt und props2.txt. Interessant ist zu sehen, was geschieht, wenn diese Dateien dem Programm als Argument übergeben werden.
Lösung Nr. 4
Diese Lösung wird mit const_val und dependent_static einfacher. Wenn man const_val konstruiert, gehört der Eigenschaftsname konzeptuell zum Properties-Objekt. Der Ausdruck
ist intuitiver als
Mit dieser Lösung wird das ermöglicht.
Ist die Initialisierung einer Konstante nicht möglich (die Eigenschaft existiert nicht für das Properties-Objekt), kann ihr ein Default-Wert vergeben werden. Hierfür wird einfach ein weiteres Argument hinzugefügt:
Die Initialisierung einer Konstante könnte fehlschlagen, wenn keine Eigenschaft existiert, was eine Exception auslöst. Wird ein Default-Wert vergeben, wird die Konstante auf diesen Wert gesetzt und das Programm weiterhin ausgeführt.
Zur Initialisierung sowohl von Konstanten als auch dependent_statics wird constants_and_dependents::initialize anstelle von all_constants::initialize_constants() und all_dependent_statics::initialize_statics() aufgerufen.
Nun können Abhängigkeiten zwischen dependent_static Objekten verwaltet werden. Hängt dependent_static A von dependent_static B ab, wird A nach B initialisiert.
s_AllUsers aus der vorhergehenden Lösung muss einige Daten in einem s_statisticsLog ausgeben. Sowohl s_AllUsers als auch s_statisticsLog sind dependent_statics. Damit die Anwendung ordnungsgemäß funktioniert, muss s_statisticsLog vor AllUsers initialisiert werden. Das Hinzufügen von Abhängigkeiten ist relativ einfach:
Hier ein Beispiel:
Sowohl set_dependent_static_name und add_dependency_on_static sind Hilfsklassen, deren einzige Aufgabe darin besteht, ein dependent_static zu benennen oder eine Abhängigkeit herzustellen.
In Listing K sind zwei FIXME-Kommentare ersichtlich. Wenn das Programm unverändert ausgeführt wird, ist das Resultat wahrscheinlich eine Exception. Entfernt man den Kommentar aus diesen zwei Zeilen, läuft das Programm wie erwartet.
Kontinuierliche Content Produktion und Markenaufbau sind essentieller Pfeiler von langfristigen Unternehmenserfolg. Das ist mittlerweile auch…
KI-Funktionen beschleunigen die Erholung des PC-Markts. Der Nettogewinn legt um 44 Prozent zu, der Umsatz…
Googles App-Entwickler-Kit dient der Tarnung des schädlichen Codes. Der Sicherheitsanbieter Jamf hält die Schadsoftware für…
Ausgeklügelte Phishing-Kampagne verwendet eine weiterentwickelte Version der Rhadamanthys-Stealer-Malware.
Die EU-Kommission kritisiert die Verknüpfung von Facebook und dem hauseigenen Online-Kleinanzeigendienst. Sie sieht darin einen…
Fast zwei Drittel halten jedoch eine Umsetzung aller Vorgaben von NIS 2 bis Jahresende für…