Mam ostateczny non-statycznego użytkownik:W języku Java, czy pole końcowe może zostać zainicjalizowane przez pomocnika konstruktora?
private final HashMap<String,String> myMap;
chciałbym zainicjować za pomocą metody zwanej przez konstruktora. Ponieważ myMap jest ostateczna, moja metoda "pomocnika" nie jest w stanie zainicjować jej bezpośrednio. Oczywiście mam opcje:
Mogę zaimplementować kod inicjujący myMap bezpośrednio w konstruktorze.
MyConstructor (String someThingNecessary)
{
myMap = new HashMap<String,String>();
myMap.put("blah","blahblah");
// etc...
// other initialization stuff unrelated to myMap
}
mogę mieć moja metoda pomocnika zbudować HashMap, powrót do konstruktora i mieć konstruktor następnie przypisać obiekt do 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;
}
Sposób nr 2 jest w porządku, jednak zastanawiam się, czy istnieje jakiś sposób mogę pozwolić metoda pomocnika bezpośrednio manipulować MyMap. Być może modyfikator, który to wskazuje, może być wywołany tylko przez konstruktora?
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...
}
Czy wiesz, co zrobią osoby odpowiadające na twoje pytanie? Tak, wypróbują to, otwierając Eclipse i wklejając swój kod! :) – Simon
@Simon Moje pytanie dotyczy alternatywy dla tego, co próbowałem. Zastanawiam się, czy ktoś o lepszej znajomości tego języka niż mnie może doprowadzić do słowa kluczowego lub paradygmatu, nie jestem świadomy. – csj
odpowiedź brzmi Nie. Źródło: Specyfikacja języka Java 8.3.1.2 – mihi