Если переменная экземпляра устанавливается окончательное его значение не может быть изменено, какПочему переменная класса конечного экземпляра в Java?
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<String, Object> cacheMap = new HashMap<String, Object>();
Я не мог понять, почему это объявлено так? Обычно в этом случае он объявляется. Означает ли это, что если я помещу карту хэша, то я не смог бы изменить ее значение?
Edit:
Если cacheMap, который объявлен как окончательный передается в качестве параметра к другому классу, то ошибка не показан для окончательной, если я изменю свою ссылку. Почему это так?
class CacheDTO {
private Map conditionMap;
public Map getConditionMap() {
return conditionMap;
}
public void setConditionMap(Map conditionMap) {
this.conditionMap = conditionMap;
}
}
Тогда
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.
Я отредактировал некоторый пункт на вопросе. –
@abishkarbhattarai Я обновил. Надеюсь, это поможет. –
@ sᴜʀᴇsʜᴀᴛᴛᴀ Хорошо Объяснение.Но я могу пояснить одно, почему finalMap.put (....) не имеет никакой ошибки, bcz изменяет конечную переменную, поскольку состояния Java Rules Конечная переменная константа не может быть изменена. Итак, почему ошибка компиляции в finalMap.put (...) ??? – artapart