Ho un membro static finale:In Java, un campo finale può essere inizializzato da un helper costruttore?
private final HashMap<String,String> myMap;
desidero inizializzare utilizzando un metodo chiamato dal costruttore. Poiché myMap è definitivo, il mio metodo "helper" non è in grado di inizializzarlo direttamente. Certamente ho opzioni:
Potrei implementare il codice di inizializzazione myMap direttamente nel costruttore.
MyConstructor (String someThingNecessary)
{
myMap = new HashMap<String,String>();
myMap.put("blah","blahblah");
// etc...
// other initialization stuff unrelated to myMap
}
ho potuto avere il mio metodo di supporto costruire l'HashMap, restituirlo al costruttore, e hanno il costruttore quindi assegnare l'oggetto da 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;
}
Metodo # 2 va bene, però, mi chiedo se c'è qualche modo ho potuto consentire al metodo di supporto per manipolare direttamente myMap. Forse un modificatore che lo indica può essere chiamato solo dal costruttore?
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...
}
Sai cosa faranno le persone che rispondono alla tua domanda? Sì, lo provano aprendo Eclipse e copiando il codice! :) – Simon
@Simon La mia domanda richiede un'alternativa a quello che ho provato. Mi chiedo se qualcuno con una migliore conoscenza di quella lingua possa guidarmi verso una parola chiave o un paradigma di cui non sono a conoscenza. – csj
la risposta è No. Fonte: specifica linguaggio Java 8.3.1.2 – mihi