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