在Martin Odersky 最近发表的关于 Scala 程序员能力水平的文章中,在专家库设计师部分,他包含了术语"早期初始化者".
在Scala编程中没有提到这些.这些是什么?
我有这段代码从文件加载属性:
class Config {
val properties: Properties = {
val p = new Properties()
p.load(Thread.currentThread().getContextClassLoader.getResourceAsStream("props"))
p
}
val forumId = properties.get("forum_id")
}
Run Code Online (Sandbox Code Playgroud)
这似乎工作正常.
我已经尝试将初始化移动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
}
Run Code Online (Sandbox Code Playgroud)
}
但它不起作用!(properties在null中properties.get("forum_id")).
那为什么会这样?loadedProps引用时不评估properties?
其次,这是初始化需要非平凡处理的变量的好方法吗?在Java中,我将声明它们的final字段,并在构造函数中执行与初始化相关的操作.
Scala中是否存在此方案的模式?
谢谢!