2011-02-07 7 views
2

可能性の重複:
Why use getters and setters?なぜ変数にgetterメソッドとsetterメソッドを公開するのではなく好むのですか?

はい、それは非常に単純なことだが、私はこのために良いresonを見つけることではないのです。変数をプライベートにして、その変数にアクセスするためのセッターにゲッターを提供するのがよい方法です。まだこれ以外の理由はありますか?

+0

確実に尋ねられ、回答されました。深く:-) –

答えて

4

ルックアップ「カプセル化」と「情報隠蔽」。

基本的に、クラスはデータを管理し、そのデータへのアクセスを提供しますが、そのデータの内部表現はクラスに対してプライベートに保たれている必要があります。このように、クラスは他のコードを破ることなく内部表現を変更することができます。

など。次の点を考慮してください:

A) 

    public Date date; 

B) 

    private Date date; 


    public Date getDate(){...} 
    public setDate(Date date){...} 

後で、日付の代わりにカレンダーを使用することを選択します。 ケースA)では、コードを破損することなくデータタイプを変更することはできません。あなたがすることができるケースBでは

):

private Calendar calendar; 


    public Date getDate(){...} 
    public setDate(Date date){...} 
    public Calendar getCalendar(){...} 
    public setCalendar(Calendar calendar){...} 

あなたが得る/ SETDATE方法で変換を行うことができます。クライアントコードは壊れません。あなたは時々ゲッターとセッターを使用したい

もう一つの理由は、JavaBeansパターンのベースライブラリ/

フレームワークを使用することです。

0
  • それが実際に必要な場合にのみだけ
  • 自動的にそれをしないゲッター/セッターは、内部実装を隠蔽し、理論的にはあなたに明確に定義されたインタフェースを提供し、あなたが変更することができ、ゲッター/セッターを提供クライアントがコードを変更する必要のない内部実装
0

変数をpublicにしておくと、オブジェクトが一貫性のある状態を保つことができなくなります。あなたのセッターでは、例えば、以下のようなチェックをすることができます。負の数を年齢として設定しないでください。

パブリック変数を使用している場合、リスナーは通常、リスナーがsetter経由で変数を設定する際に通知を使用するため、ドロップする可能性があります。パブリック変数を直接変更するときに変更を追跡する機会はありません。

これらはいくつかの非常に基本的な例ですが、より多くの情報が確実に得られます。

1

多くの理由があります。これは、クラスの内部動作へのアクセス(アクセサ)を制御する方法です。たとえば、セッターに渡された新しいオブジェクトにハンドラーを指すのではなく、オブジェクトまたはセッターのクローンを返すようにしたい場合があります。別の理由は、この機能を公開せずにオブジェクトを取得または設定する前または後に何かを行うことです。

それをまとめると:

  1. あなたがそれらを使用してくださいあなたが制御されていないアクセス

への扉を閉め、将来の拡張

  • の余地を与えるのみけれども、必要な場合。

  • 関連する問題