Почему конечная переменная класса экземпляра в Java?
Если переменная экземпляра установлена как final, ее значение не может быть изменено как
public class Final {
private final int b;
Final(int b) {
this.b = b;
}
int getFinal() {
return b = 8; // COMPILE TIME ERROR
}
}
Где-то в коде я видел переменную класса экземпляраHashMap объявлен окончательным
private final Map cacheMap = new HashMap();
Я не мог понять, почему так объявлено? Обычно в этом случае это объявляется. Означает ли это, что если я добавлю хэш-карту, я не смогу изменить ее значение?
Редактировать:
Если cacheMap, объявленный как final, передается в качестве параметра другому классу, ошибка не отображается для final, если я изменяю его ссылку. Почему так?
class CacheDTO {
private Map conditionMap;
public Map getConditionMap() {
return conditionMap;
}
public void setConditionMap(Map conditionMap) {
this.conditionMap = conditionMap;
}
}
затем
private final Map cacheMap = new HashMap();
CacheDTO cc = new CacheDTO();
cc.setConditionMap(cacheMap);
Map cacheMapDeclaredAsFinal = cc.getConditionMap();
Map newMap = new HashMap();
cacheMapDeclaredAsFinal = newMap; // In this case no error is shown. Though cacheMapDeclaredAsFinal reference is obtained by calling cc.getConditionMap() and cacheMapDeclaredAsFinal refers to final.