我来自Java,与大多数Java程序员一样,我阅读了J. Bloch的有效Java,他建议尽可能地减少字段访问级别。像akka
这样的强大框架使用这样的公共值这一事实让我感到惊讶:
trait Actor {
type Receive = Actor.Receive
implicit val context: ActorContext = {
//ommited for simplicity
}
implicit final val self = context.self //MUST BE A VAL, TRUST ME
//...
}
在Scala中使用公共val
是否常见?这个的惯例是什么?因为在Java中,我绝对不会在一般情况下公开字段。 (当然,可能存在私有字段不切实际的情况,但这绝对是一个例外)。
答案 0 :(得分:2)
在java中,使用getter和setter代替公共字段,而scala中的Uniform Access Principal则需要使用getter和setter。
http://joelabrahamsson.com/learning-scala-part-nine-uniform-access/
答案 1 :(得分:1)
主要问题在于暴露可变状态。如果你的方法是纯粹的,变量是不可变的,那么就不会发生不安全的事情。
但是,如果您想保持API干净,您始终可以使用private/protected[...]
隐藏它们。