鉴于这种情况:
object ResourceManager {
private var inited = false
def init(config: Config) {
if (inited)
throw new IllegalStateException
// do initialization
inited = true
}
}
有什么办法可以让我inited
以某种方式“私有于 init()”,这样我就可以确定这个类中没有其他方法能够设置inited = false
?
取自在 Scala 中,如何在函数内声明静态数据? https://stackoverflow.com/questions/1516087/in-scala-how-would-you-declare-static-data-inside-a-function/1516196#1516196。不要使用方法,而使用函数对象:
val init = { // or lazy val
var inited = false
(config: Config) => {
if (inited)
throw new IllegalStateException
inited = true
}
}
在外部作用域初始化期间(如果val
)或首次访问(lazy val
),执行变量的主体。因此,inited
被设定为false
。最后一个表达式是一个匿名函数,然后被分配给init
。每进一步访问init
然后将执行这个匿名函数。
请注意,它不会表现出exactly就像一种方法。 IE。不带参数调用它是完全有效的。然后它的行为就像一个带有下划线的方法method _
,这意味着它只会返回匿名函数而不会抱怨。
如果出于某种原因,您实际上需要方法行为,您可以将其设为private val _init = ...
并从公共调用它def init(config: Config) = _init(config)
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)