Scala - kolejność inicjalizacji vals
Mam ten fragment kodu, który ładuje właściwości z pliku:
class Config {
val properties: Properties = {
val p = new Properties()
p.load(Thread.currentThread().getContextClassLoader.getResourceAsStream("props"))
p
}
val forumId = properties.get("forum_id")
}
Wydaje się, że działa dobrze.
Próbowałem przenieść inicjalizacjęproperties
w inny val,loadedProperties
, lubię to:
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
}
}
Ale to nie działa! (properties
ma wartość nullproperties.get("forum_id")
).
Dlaczego miałoby to być? Nie jestloadedProps
oceniane, gdy odwołuje się doproperties
?
Po drugie, czy jest to dobry sposób na zainicjowanie zmiennych, które wymagają nietrywialnego przetwarzania? W Javie deklarowałbym jefinal
pola i wykonaj operacje związane z inicjalizacją w konstruktorze.
Czy istnieje schemat dla tego scenariusza w Scali?
Dziękuję Ci!