【发布时间】:2013-01-28 17:50:47
【问题描述】:
我有这段代码可以从文件中加载属性:
class Config {
val properties: Properties = {
val p = new Properties()
p.load(Thread.currentThread().getContextClassLoader.getResourceAsStream("props"))
p
}
val forumId = properties.get("forum_id")
}
这似乎工作正常。
我尝试将 properties 的初始化移动到另一个 val,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") 中为空)。
为什么会这样?被properties 引用时,loadedProps 不被评估吗?
其次,这是初始化需要非平凡处理的变量的好方法吗?在 Java 中,我将它们声明为final 字段,并在构造函数中执行与初始化相关的操作。
在 Scala 中是否有这种场景的模式?
谢谢!
【问题讨论】:
标签: scala constructor initialization immutability final