Scala - порядок инициализации vals
У меня есть этот кусок кода, который загружает свойства из файла:
class Config {
val properties: Properties = {
val p = new Properties()
p.load(Thread.currentThread().getContextClassLoader.getResourceAsStream("props"))
p
}
val forumId = properties.get("forum_id")
}
Кажется, это работает нормально.
Я попытался переместить инициализациюproperties
в другой вал,loadedProperties
, как это:}
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
}
Но это нет работа! (properties
нуль вproperties.get("forum_id")
).
С чего бы это? неloadedProps
оценивается при ссылке?properties
Во-вторых, это хороший способ инициализации переменных, которые требуют нетривиальной обработки? На Java я бы их объявилfinal
поля, и делать связанные с инициализацией операции в конструкторе.
Есть ли шаблон для этого сценария в Scala?
Спасибо!