私たちが知っているように、Scalaは任意のパブリックフィールドに対して自動的にゲッターとセッターを生成し、実際のフィールド変数をprivateにします。フィールドを一般公開するよりもなぜ優れていますか?Scalaのオブジェクトフィールドのgetter/setterの自動生成のポイントは何ですか?
答えて
1つの場合、パブリックのvar/valを(2つの)カップルでスワップしても、バイナリ互換性を維持できます。次に、派生クラスでvar/valをオーバーライドすることができます。
まず、フィールドをパブリックにすると、クライアントはフィールドを読み書きできます。不変なオブジェクトを持つことは有益なので、フィールドを読み込み専用にすることをお勧めします(Scalaでは "var"ではなく "val"として宣言することで実現できます)。
あなたの実際の質問に戻ります。 Scalaでは、些細なバージョン以上のものが必要な場合は、独自のセッターとゲッターを定義することができます。これは不変量を維持するのに便利です。セッターの場合は、フィールドが設定されている値を確認することができます。フィールド自体を公開しておけば、そうする機会はありません。
これは "val"として宣言されたフィールドにも役立ちます。クラスの内部状態を表すArray [X]型のフィールドがあるとします。クライアントはこの配列への参照を取得して変更できるようになりました。この場合も、不変条件を確実に維持する機会はありません。しかし、独自のゲッターを定義することができるので、実際の配列のコピーを返すことができます。
参照型のフィールドをJavaで「final public」にすると、同じ引数が適用されます。クライアントは参照をリセットすることはできませんが、参照先のオブジェクトは変更します。
関連するメモ:Scalaのgettersでフィールドにアクセスすると、フィールドに直接アクセスするように見えます。これについての良い点は、フィールドへのアクセスを可能にし、オブジェクト上のパラメータを持たないメソッドを同じもののように呼び出すことができることです。したがって、フィールドに値を保存するのではなく、その場で値を計算したくないと判断した場合、クライアントは同じことを気にする必要はありません。Uniform Access Principle
簡潔に:統一アクセス原理。
valを使用すると、スーパークラスから抽象メソッドを実装できます。 2つの可能なサブクラス、円がバウンディングボックスで定義されたもの、それが中心と半径で定義のOneがあり
abstract class circle {
def bounds: Rectangle
def centre: Point
def radius: Double
}
:いくつかの架空のグラフィックパッケージから次の定義を想像してみてください。 UAPのおかげで、実装の詳細を完全に抽象化し、簡単に変更することができます。
3つ目の可能性があります:遅延値。これらは、我々のサークルの境界を何度も再計算するのを避けるために非常に便利ですが、均一なアクセスの原則なしにどのように怠惰な値を実装できるか想像するのは難しいです。
- 1. 自動生成と自動インクリメントのビルド番号の違いは何ですか?
- 2. 静的オブジェクトフィールドの作成時に発生する問題は何ですか?
- 3. 空のgetterとsetterのポイントは何ですか?したがって、getterとsettersを自動生成するポイントはC#
- 4. Spring-Restでの行動JUnitテストの作成のポイントは何ですか?
- 5. 3Dポイントの生成
- 6. フィールド生成メソッドの自動生成
- 7. エンティティフレームワークデータベースからのインターフェイスの生成最初の自動生成コード
- 8. ASP.NETでの自動マシンキーの生成
- 9. Laravelでの自動アプリケーションスケルトンコードの生成
- 10. Eclipseでのテストスイート生成の自動化
- 11. Hibernateマッピングファイルの自動生成
- 12. ジャンゴモードの自動生成シート
- 13. PDF生成の自動化
- 14. 自動データアクセスレイヤの生成
- 15. intellijのjavadoc自動生成
- 16. ウェブサイトの自動生成グラフ
- 17. Javaポリシーファイルの自動生成
- 18. サブクラスの自動生成メソッド
- 19. ファイルの自動生成
- 20. Scalaでのコード生成
- 21. OpenCLカーネルの__のポイントは何ですか?
- 22. このコードのポイントは何ですか?
- 23. getlineのバッファのポイントは何ですか?
- 24. Luaのネストブラケットのポイントは何ですか?
- 25. カミソリビューエンジンのMasterLocationFormatsのポイントは何ですか?
- 26. バザールのタグのポイントは何ですか?
- 27. iOSのナビゲーションツールバーのポイントは何ですか?
- 28. D3D12のSetGraphicsRootSignatureのポイントは何ですか?
- 29. Rubyの@@ double_at_variableのポイントは何ですか?
- 30. EC2のインスタンスストレージのポイントは何ですか?