2

クラスでゲッター/セッターを作成する場合、セッタープライベートメソッドにする必要がありますか?

変数を設定するために別のメソッドを書かなければならないのは少し冗長に思えるかもしれませんが、より保守しやすいコード構造が可能になるようです。

4

4 に答える 4

5

セッターは、オブジェクトを直接公開せずに、オブジェクトの内部状態を変更できるようにするためのメソッドです。後で、検証またはその他のロジックをsetter内に含めることができます。

あなたのセッターがプライベートである場合、あなたはポイントを逃しています。それは、家の中にドアが常に閉まっていて、開けることさえできないようなものです。また、クラス内ではフィールドに直接アクセスできますが、なぜそこでセッターを使用するのでしょうか。

もちろん、本当の問題は、セッターが必要なのかということです。最近の典型的なクラスには、多数のフィールド、自動生成されたゲッター/セッターがあり、ロジックはありません。これはほとんどクラスではありません。これは、要素にアクセスするための厄介な方法を備えた単なる構造です。しかし、それはあなたが求めているものではありません。

于 2012-10-31T19:32:53.600 に答える
3

一般に、「保護された」メンバーの「プライベート」アクセスはお勧めしません。通常、あなたまたは他のプログラマーは、子孫クラスでそれを必要とする場合があります。

長く退屈な説明的な答え

現在、アクセサー (「ゲッターとセッター」) については、プログラミング言語の構文とプロパティの実装にも依存しています。

たとえば、C++、または Java の場合、「実際のプロパティ」はなく、プロパティと同じスコープが必要なアクセサがあると考えられます。(プロパティのテンプレートを使用しない場合)。

C# と Delphi (Lazarus) にはプロパティが実装されていますが、C# でアクセサーを宣言する方法が好きではありません。

プロパティをパブリックにしない、「保護」または「パッケージ保護」したい場合と、そのアクセサ、プロパティと同じアクセスが必要な場合があります。

私は、Object Pascal のコードで作業しているだけです。ほとんどのプロパティは「パブリック」であり、そのアクセサーは「保護」されていますが、そのコードを C++ または Java に移行したいため、アクセサーも「パブリック」にします。

クイック ショート アンサー

プロパティと同じアクセスですが、プロパティの構文に依存します。

于 2012-10-31T20:21:38.003 に答える
1

外部オブジェクトから操作できるようにすることが意図されている場合は、パブリックにする必要があります。それが POJO 実装のポイントです。(http://en.wikipedia.org/wiki/Plain_Old_Java_Object)

他のパターンの実装を検討している場合は、Java Access Modifiers に関するドキュメントを参照することをお勧めします (http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html)。

于 2012-10-31T19:35:49.200 に答える
1

通常、セッター/ゲッターは公開する必要があります。これは、データへのアクセスを許可するためです。実装に依存する詳細を混乱させたくないため、他の人に直接アクセスしたくないためです。カプセル化についてです。

ただし、データへのアクセスを同じクラスのインスタンスだけに制限したいが、何らかの理由 (簿記、ロックなど) でデータへのアクセスをある程度制御したい場合があります。プライベート(または保護された)セッター/ゲッターを持つケースは理にかなっています(コードの再利用と安全性POVの両方から)。ただし、コンパイラに頼って、何か間違ったことをしているのを見つけることはできません。

于 2012-10-31T19:48:45.303 に答える