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.