Warum endgültige Instanzklassenvariable in Java?

Wenn die Instanzvariable final gesetzt ist, kann ihr Wert nicht geändert werden

public class Final {

    private final int b;

    Final(int b) {
        this.b = b; 
    }

    int getFinal() {
        return  b = 8;  // COMPILE TIME ERROR 
    }
}


Irgendwo im Code habe ich Instanzklasse Variable gesehenHashMap als endgültig erklärt

 private  final Map<String, Object> cacheMap = new HashMap<String, Object>();

Ich konnte nicht verstehen, warum es so erklärt wird? Normalerweise wird in diesem Fall deklariert. Bedeutet das, dass ich nach dem Einfügen der Hash-Karte ihren Wert nicht ändern konnte?

Bearbeiten:
Wenn die als final deklarierte cacheMap als Parameter an eine andere Klasse übergeben wird, wird der Fehler bei final nicht angezeigt, wenn ich die Referenz ändere. Warum ist es so?

 class CacheDTO {

    private Map conditionMap;

    public Map getConditionMap() {
        return conditionMap;
    }

    public void setConditionMap(Map conditionMap) {
        this.conditionMap = conditionMap;
    }
}

Dann

private  final Map<String, Object> cacheMap = new HashMap<String, Object>();
CacheDTO cc = new CacheDTO();
cc.setConditionMap(cacheMap);
Map<String, Object> cacheMapDeclaredAsFinal = cc.getConditionMap();
Map<String, Object> newMap = new HashMap<String, Object>();
cacheMapDeclaredAsFinal = newMap;    // In this case no error is shown. Though cacheMapDeclaredAsFinal reference is obtained by calling cc.getConditionMap() and cacheMapDeclaredAsFinal refers to final.

Antworten auf die Frage(11)

Ihre Antwort auf die Frage