2016-08-24 67 views
0

我來自Java,和大多數Java程序員一樣,我閱讀J. Bloch的有效Java,他建議儘可能最小化字段訪問級別。我被這樣的事實那種驚訝的是像akka使用公共瓦爾斯這樣那樣的強大的框架:Scala使用公共vals

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 

    //... 
} 

它是常見的斯卡拉使用公共val S'這是什麼約定?因爲在Java中,我絕對不會在一般情況下公開字段。 (當然,可能會出現私人領域不切實際的情況,但這絕對是個例外)。

+1

在斯卡拉,統一訪問原則通常是建議http://joelabrahamsson.com/learning-scala-part-nine-uniform-access/另外,請參閱此問題http://stackoverflow.com/questions/39095679/ using-class-parameters-to-assign-field-value – sebszyller

+2

可能的原因之一:Java對於不可變的值沒有很好的支持。所以有一些外部代碼會改變它們的危險。斯卡拉的瓦爾斯是不可改變的,斯卡拉鼓勵使用vals而不是瓦爾斯。因此,向外界揭露不可變的瓦爾沒有任何傷害。 – Samar

回答

1

的主要問題是在曝光的可變狀態。如果你的方法是純粹的並且變量是不變的,那麼不會有不安全的事情發生。

但是,如果你想保持API清潔,你總是可以用private/protected[...]來隱藏它們。