2016-08-24 5 views
0

私はJavaから来て、ほとんどのJavaプログラマのように、私は可能な限りフィールドのアクセスレベルを最小限にすることを提案する、J. Blochの効果的なJavaを読んでいます。スカラの公開値の使用

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 Sを使用するのが一般的である:私は種類のこのようなakka使用パブリックヴァルスなどのような強力なフレームワークがあるという事実に驚いたのか?そして、これのための大会は何ですか? Javaでは、一般的な環境下でフィールドを公開することは間違いありません。 (もちろん、プライベートフィールドが実用的でない場合もありますが、それは間違いなく例外です)。

+1

Scalaでは、統一アクセス原理によくお伝えしますhttp://joelabrahamsson.com/learning-scala-part-nine-uniform-access/また、この質問を参照してくださいhttp://stackoverflow.com/questions/39095679/ using-class-parameters-to-assign-field-value – sebszyller

+2

考えられる理由の1つ:Javaは不変の値を適切にサポートしていません。したがって、いくつかの外部コードがそれらを変更する危険性があります。 scalaのValsは不変であり、Scalaはvarsの代わりにvalの使用を奨励します。したがって、不変のvalを外部に公開することに害はありません。 – Samar

答えて

1

主な問題は、可変状態を露出しています。あなたのメソッドが純粋で変数が不変の場合、安全でないことは起こりません。

ただし、APIをきれいに保つ場合は、常にprivate/protected[...]で非表示にすることができます。

関連する問題