Scala - orden de inicialización de vals
Tengo este fragmento de código que carga las propiedades de un archivo:
class Config {
val properties: Properties = {
val p = new Properties()
p.load(Thread.currentThread().getContextClassLoader.getResourceAsStream("props"))
p
}
val forumId = properties.get("forum_id")
}
Esto parece estar funcionando bien.
He intentado mover la inicialización deproperties
en otro val,loadedProperties
, Me gusta esto:
class Config {
val properties: Properties = loadedProps
val forumId = properties.get("forum_id")
private val loadedProps = {
val p = new Properties()
p.load(Thread.currentThread().getContextClassLoader.getResourceAsStream("props"))
p
}
}
¡Pero no funciona! (properties
es nulo enproperties.get("forum_id")
).
¿Por qué sería eso? No esloadedProps
evaluado cuando se hace referencia porproperties
?
En segundo lugar, ¿es esta una buena manera de inicializar variables que requieren un procesamiento no trivial? En Java, los declararía.final
campos, y hacer las operaciones relacionadas con la inicialización en el constructor.
¿Hay un patrón para este escenario en Scala?
¡Gracias!