que tienen un miembro no static final:En Java, ¿se puede inicializar un campo final desde un ayudante de constructor?
private final HashMap<String,String> myMap;
me gustaría inicializarlo utilizando un método llamado por el constructor. Como myMap es final, mi método de "ayuda" no puede inicializarlo directamente. Por supuesto que tengo opciones:
Podría implementar el código de inicialización myMap directamente en el constructor.
MyConstructor (String someThingNecessary)
{
myMap = new HashMap<String,String>();
myMap.put("blah","blahblah");
// etc...
// other initialization stuff unrelated to myMap
}
pude tener mi método de ayuda construir el HashMap, devuélvalo al constructor, y tienen el constructor a continuación, asignar el objeto a myMap. Método
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 está muy bien, sin embargo, me pregunto si hay alguna manera de que pudiera permitir que el método de ayuda para manipular directamente myMap. ¿Tal vez un modificador que indique que solo puede ser llamado por el constructor?
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...
}
¿Sabes lo que harán las personas que responden tu pregunta? Sí, lo probarán abriendo Eclipse y copiando y pegando su código. :) – Simon
@Simon Mi pregunta está solicitando una alternativa a lo que he intentado. Me pregunto si alguien con un mejor conocimiento de ese idioma que yo pueda guiarme hacia una palabra clave o paradigma que desconozco. – csj
la respuesta es No. Fuente: especificación del lenguaje Java 8.3.1.2 – mihi