私には最後の非静的メンバーがいます:
private final HashMap<String,String> myMap;
コンストラクターによって呼び出されるメソッドを使用して初期化したいのですが。myMapはfinalであるため、「helper」メソッドはそれを直接初期化できません。もちろん、私には選択肢があります:
myMap初期化コードをコンストラクターに直接実装できます。
MyConstructor (String someThingNecessary)
{
myMap = new HashMap<String,String>();
myMap.put("blah","blahblah");
// etc...
// other initialization stuff unrelated to myMap
}
ヘルパーメソッドでHashMapを作成し、それをコンストラクターに返し、コンストラクターでオブジェクトをmyMapに割り当てることができます。
MyConstructor (String someThingNecessary)
{
myMap = InitializeMyMap(someThingNecessary);
// other initialization stuff unrelated to myMap
}
private HashMap<String,String> InitializeMyMap(String someThingNecessary)
{
HashMap<String,String> initializedMap = new HashMap<String,String>();
initializedMap.put("blah","blahblah");
// etc...
return initializedMap;
}
方法2は問題ありませんが、ヘルパーメソッドがmyMapを直接操作できるようにする方法があるかどうか疑問に思っています。おそらく、コンストラクターによってのみ呼び出すことができることを示す修飾子ですか?
MyConstructor (String someThingNecessary)
{
InitializeMyMap(someThingNecessary);
// other initialization stuff unrelated to myMap
}
// helper doesn't work since it can't modify a final member
private void InitializeMyMap(String someThingNecessary)
{
myMap = new HashMap<String,String>();
myMap.put("blah","blahblah");
// etc...
}