У меня есть последний нестатический член:
private final HashMap<String,String> myMap;
Я хотел бы инициализировать его с помощью метода, вызываемого конструктором.Поскольку myMap является окончательным, мой «вспомогательный» метод не может инициализировать его напрямую.Конечно, у меня есть варианты:
Я мог бы реализовать код инициализации 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...
}