4

現在のプロジェクトでは、インスタンスを変数に格納するクラスがあります。このインスタンスは、プロジェクト内の他のすべてのクラスからアクセスできる必要がありますが、変更できるのは独自のクラスのみです。

どうすればこれを達成できますか?

4

4 に答える 4

18

publicゲッターを作成しますが、セッターは作成しません。 publicそしてフィールド自体private

于 2013-01-14T19:01:41.120 に答える
4

要するに、それが構築された後immutable object、状態を変更することはできません。Object

String不変の一般的な例ですClass

class immutable次のようにしてください-

  • クラスが次のようにならないようにしますoverridden-を作成するか、ファクトリをclass final使用 してコンストラクタをプライベートに保ちます。static
  • フィールドprivateを作成し、final
  • no-argument constructor呼び出し元に、メソッドへの後続の呼び出しと組み合わせて使用​​するのではなく、単一のステップでオブジェクトを完全に構築するように強制しsetXXXます。
  • オブジェクトの状態を変更できるメソッドを提供しないでください。メソッドだけでなく、状態を変更できるメソッドも提供しますsetXXX
  • クラスに可変オブジェクトフィールドがある場合、クラスとその呼び出し元の間で渡されるときに、それらを防御的にコピーする必要があります。
于 2013-01-14T19:06:43.360 に答える
2

誰かが「パブリックゲッターですが、プライベートフィールドのパブリックセッターはありません」と提案しています。

注意:これは、フィールドがプリミティブ型の場合にのみ機能します。
セッターを含むオブジェクトの場合でも、コンテンツを変更できます。したがって、読み取り専用ではありません。

ディープコピー/クローンを実行せずに戻り型を読み取り専用にするためのいくつかの構造がJava言語に提供されているのを見るのは興味深いでしょう。

私はReadOnlygetEmployee(){...}のように画像化しています

于 2015-03-13T19:21:12.023 に答える
0

シングルトンをインスタンス化するための定型コードは、多くの場所で見つけることができます。たとえば、http://www.javacoffeebreak.com/articles/designpatterns/index.htmlを参照してください。

アプリケーションにシングルトンへの参照が散らばっていると、それを取り除くのはかなり難しいため、多くの人がシングルトンをアンチパターンと見なしていることに注意してください。

于 2013-01-14T19:10:36.827 に答える