2

通常、Java Bean クラスでは、変数をプライベートとして宣言しています。とにかく、setter メソッドと getter メソッドを public として宣言しています。次に、プロパティの値を取得および設定できます。では、ここで変数をプライベートとして宣言することの使用は何ですか? public として宣言するとどうなりますか?

前もって感謝します..

4

4 に答える 4

9

それがカプセル化の目的です。

プロパティを持つことを検討し、ageそれをある程度制御したいとします。フィールドを単純にパブリックとして公開すると、外部からアクセスして、好きなことを行うことができます。次に、年齢が有効であることを確認するのは少し面倒です。

そうは言っても、setter メソッドを使用すると、たとえば、検証メカニズムを配置できます。これにより、変数がいつ、どのようにアクセスされ、変更されるかを制御できます。

同じことが getter メソッドにも当てはまります。公開したくない内部構造があるとします。たとえば、内部で列挙を使用しているとします。ただし、これをクラス外で表示したくはありません。たとえば、ゲッターでは、生成したい値の文字列バージョンを生成します。

于 2013-04-23T05:38:56.397 に答える
1
  1. 次のように、インスタンス変数に値を設定する前に検証を行うことができます。

    class HeightBean {
    
      private int height;
      public int getHeight() {
       return height;
      }
      public void setHeight(int height) {
      if(height<0)
          height=0;
      this.height = height;
      }
    }
    
  2. ほとんどのフレームワークは、Bean セッターとゲッターを使用してデータにアクセスします。たとえば、

      <jsp:useBean id="name" class="java.lang.String" scope="session">
      </jsp:useBean>
      <jsp:getProperty property="bytes" name="name"/>
    
于 2013-04-23T05:43:16.523 に答える
0

それは選択肢を提供します。ゲッターとセッターを提供する場合と提供しない場合があります。

たとえば、不変オブジェクトの場合に getter のみを提供することは、一般的な設計上の選択です。

経験則: できる限り少ない可視性を使用してください。

于 2013-04-23T05:38:48.650 に答える
0

その主な理由は次のとおりです。

読み取りおよび書き込みアクセスと不変性の制限:

  1. 要素を読み取り専用にしたい場合。ゲッターをパブリックとして公開し、

  2. プロパティを構成可能にし、値の設定中に必要に応じて検証を行うことができるのは、セッターのみです。

  3. ゲッターは防御コピーを作成できます。

  4. setter メソッドで値の変更を通知するために、リスナーを関連付けることができます。

  5. あるフィールドが別のフィールドに依存している場合、そのロジックを setter メソッドに入れることができます。そうしないと、それを管理するための定型コードを常に記述する必要があり、少なくとも関数呼び出しが必要になります。それはセッターに移動できます。

しかし、setter と getter の代わりに public 属性を使用しても、これほどの柔軟性は得られません。追加の関数を作成し、オーバーヘッドを呼び出すことなく、1 から 5 を実行することはできません。

于 2013-04-23T05:41:43.637 に答える