通常、Java Bean クラスでは、変数をプライベートとして宣言しています。とにかく、setter メソッドと getter メソッドを public として宣言しています。次に、プロパティの値を取得および設定できます。では、ここで変数をプライベートとして宣言することの使用は何ですか? public として宣言するとどうなりますか?
前もって感謝します..
通常、Java Bean クラスでは、変数をプライベートとして宣言しています。とにかく、setter メソッドと getter メソッドを public として宣言しています。次に、プロパティの値を取得および設定できます。では、ここで変数をプライベートとして宣言することの使用は何ですか? public として宣言するとどうなりますか?
前もって感謝します..
それがカプセル化の目的です。
プロパティを持つことを検討し、age
それをある程度制御したいとします。フィールドを単純にパブリックとして公開すると、外部からアクセスして、好きなことを行うことができます。次に、年齢が有効であることを確認するのは少し面倒です。
そうは言っても、setter メソッドを使用すると、たとえば、検証メカニズムを配置できます。これにより、変数がいつ、どのようにアクセスされ、変更されるかを制御できます。
同じことが getter メソッドにも当てはまります。公開したくない内部構造があるとします。たとえば、内部で列挙を使用しているとします。ただし、これをクラス外で表示したくはありません。たとえば、ゲッターでは、生成したい値の文字列バージョンを生成します。
次のように、インスタンス変数に値を設定する前に検証を行うことができます。
class HeightBean {
private int height;
public int getHeight() {
return height;
}
public void setHeight(int height) {
if(height<0)
height=0;
this.height = height;
}
}
ほとんどのフレームワークは、Bean セッターとゲッターを使用してデータにアクセスします。たとえば、
<jsp:useBean id="name" class="java.lang.String" scope="session">
</jsp:useBean>
<jsp:getProperty property="bytes" name="name"/>
それは選択肢を提供します。ゲッターとセッターを提供する場合と提供しない場合があります。
たとえば、不変オブジェクトの場合に getter のみを提供することは、一般的な設計上の選択です。
経験則: できる限り少ない可視性を使用してください。
その主な理由は次のとおりです。
読み取りおよび書き込みアクセスと不変性の制限:
要素を読み取り専用にしたい場合。ゲッターをパブリックとして公開し、
プロパティを構成可能にし、値の設定中に必要に応じて検証を行うことができるのは、セッターのみです。
ゲッターは防御コピーを作成できます。
setter メソッドで値の変更を通知するために、リスナーを関連付けることができます。
あるフィールドが別のフィールドに依存している場合、そのロジックを setter メソッドに入れることができます。そうしないと、それを管理するための定型コードを常に記述する必要があり、少なくとも関数呼び出しが必要になります。それはセッターに移動できます。
しかし、setter と getter の代わりに public 属性を使用しても、これほどの柔軟性は得られません。追加の関数を作成し、オーバーヘッドを呼び出すことなく、1 から 5 を実行することはできません。