Scala使用公共vals

时间:2016-08-24 14:16:01

标签: java scala oop

我来自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中,我绝对不会在一般情况下公开字段。 (当然,可能存在私有字段不切实际的情况,但这绝对是一个例外)。

2 个答案:

答案 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[...]隐藏它们。