0

カプセル化の意味を実際に理解するには、クラスのパブリック メソッドを介してクラスのプライベート フィールドにアクセスする必要がある例は定義どおりですが、実際にはフィールドはそのままアクセス可能であるため、違いはありません。
したがって、フィールドの処理方法を非表示にするために、ゲッター/セッター内で何らかの処理が必要だと思います。しかし、それは背後のポジョの原則を破っています。この状況をどのように処理できますか?

4

7 に答える 7

3

あなたによると、「POJOの原則」が何であるかわかりません。以下は POJO であり、まだゲッターとセッターの背後にある実装の詳細を隠しています。

public class Example {
    private int thousands;
    private int units;

    public void setValue(int value) {
        thousands = value / 1000;
        units = value % 1000;
    }

    public int getValue() {
        return 1000 * thousands + units;
    }
}
于 2013-05-21T09:56:15.667 に答える
2

カプセル化とは、クラスの内部を公開しないことを意味します。

Java コンテキストでは、クラスの属性に他のクラスがアクセスできないようにする必要があることを意味します。代わりに、クラスは属性にアクセスできるメソッドを提供する必要があります。POJO クラスの場合、これらのメソッドは、POJO クラスから属性の値を設定 (セッター) および取得 (ゲッター)することのみを許可します。

カプセル化の目的は、クラスの属性が他のクラスによって変更されないように保護することです。クラスは明らかに、クラス内の属性を使用して何でも実行できます。

于 2013-05-21T09:46:54.353 に答える
0

アクセスは可能ですが、直接 (パブリック変数) を使用すると、変数の値を制限なく変更できることがわかります。この種のプライベート変数をセッター メソッドとゲッター メソッドで使用する利点は、セッター メソッド内にコードを記述して、設定された値が期待される範囲内にあるかどうかを確認できることです。または、見かけのビューとは異なる形式で値を保存することもできます。たとえば、setter メソッドのパラメーターの値にオフセットを追加して変数の値を格納し、getter メソッドではプロセスを元に戻すことができます (カプセル化)。値セットが期待される範囲内にない場合、例外をスローすることさえあります。

例 1: ここで var1 はプライベート変数です

public void setValue(int var1){
         if(var1<0){
                //throw exception
          }
         this.var1=var1;
 }

例 2:

 public void setValue(int var1){
        this.var1=calculatesomething+var1;
}
public int getValue(){
        return calculatesomething+this.var1;
}

それはカプセル化の使用です.....すべてのベスト

于 2013-05-21T10:14:04.630 に答える
0

ゲッターとセッターの多くの用途の 1 つは、変数の値を制限することです。データ メンバーをプライベートにし、ゲッターとセッターをパブリックにしておくことで、プログラマーは変数の値をチェックし続けることができます。例:

class Employee
{
    private int age;

    public int getAge()
    {
        return this.age;
    }

    public void setAge(int age)
    {
        if(age<18 || age>60)
            this.age = age;
        else
            System.out.println("The age of the employee should be between 18 and 60");
    }
}

この場合、従業員の年齢は 18 歳未満および 60 歳を超えることはできません。

于 2013-05-21T10:03:27.940 に答える
0

いいえ、フィールドはそのままではアクセスできません。メソッドをゲッターまたはセッターにするために必要なのは、適切なシグネチャだけです。

public String getFoo() {
  return null;
}

String fooを返しますが、これは a の完璧なゲッターですnull

public void setFoo(String foo) {
  // do nothing
}

これは、何もしないにもかかわらず、同じメンバーに最適なセッターです。

于 2013-05-21T09:49:35.873 に答える