Warum machen private static final Listen/Sets/Maps unveränderbar?

Gerade lese ich einige code, geschrieben von einem erfahrenen Programmierer, und ich kam auf Folgendes:

public class ConsoleFormatter extends Formatter {
    private static final Map<Level, String> PREFIXES;

    static {
        Map<Level, String> prefixes = new HashMap<Level, String>();
        prefixes.put(Level.CONFIG,  "[config]");
        prefixes.put(Level.FINE,    "[debug]");
        prefixes.put(Level.FINER,   "[debug]");
        prefixes.put(Level.FINEST,  "[trace]");
        prefixes.put(Level.INFO,    "[info]");
        prefixes.put(Level.SEVERE,  "[error]");
        prefixes.put(Level.WARNING, "[warning]");

        PREFIXES = Collections.unmodifiableMap(prefixes);
    }

    //...

}

Wie Sie sehen können, dies ist eine Klasse verwendet, für die Formatierung der log-Ausgabe. Was meine Aufmerksamkeit erregte, war jedoch der code in der statischen Initialisierung block: PREFIXES = Collections.unmodifiableMap(prefixes);.

Warum war PREFIXES machte eine unveränderliche Karte? Es ist eine private Konstante, es gibt also kein Risiko, dass das ändern der Daten außerhalb der Klasse. War es zu den Konstanten der Unveränderlichkeit ein Gefühl der Vollständigkeit?

Persönlich, ich würde habe direkt initialisiert PREFIXES als HashMap und dann put Schlüssel–Wert-Paare direkt, ohne einen dummy-Platzhalter-Karte oder das Feld eine unveränderliche Karte. Bin ich hier etwas fehlt?

  • Es könnte auch gedacht werden, um zu verhindern, dass die gleichzeitige Initialisierung Probleme beim instanziieren der Klasse, weil der einzelne Schritt Zuordnung zu PRÄFIXEN der gesamten Daten.
InformationsquelleAutor Konstantin | 2012-12-10
Schreibe einen Kommentar