インスタンス変数が final に設定されている場合、その値は次のように変更できません
public class Final {
private final int b;
Final(int b) {
this.b = b;
}
int getFinal() {
return b = 8; // COMPILE TIME ERROR
}
}
コードのどこかで、インスタンス クラス変数 HashMap が final として宣言されているのを見ました
private final Map<String, Object> cacheMap = new HashMap<String, Object>();
なぜそう宣言されているのか理解できませんでしたか?通常、その場合は宣言されます。ハッシュマップを入れたら、その値を変更できなかったということですか?
編集:
final として宣言されている cacheMap がパラメーターとして別のクラスに渡された場合、参照を変更しても final のエラーは表示されません。なぜそうなのですか?
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.