0

Java クラスで変数の値を設定できるようにするために setProperty を使用する必要があるのはなぜですか?

変数のインスタンスを作成し、そのインスタンスを使用して変数にアクセスし、値を割り当てることができる場合。

4

4 に答える 4

3

あなたが言及しているのはカプセル化です。これは、オブジェクト指向プログラミングの基礎の 1 つです。通常、他のコードがクラスの内部構造をいじる可能性を制限したいと考えています。

整数値を負の値に設定すると、クラスが壊滅的に失敗するという単純な例を想像してみてください。をsetter適切に使用すると、たとえば次のようにして、これをより適切に処理できる可能性があります。

public void setNumber(int number)
{
    if (number < 0)
    {
        number = 1;
    }
    this.number = number
}

または(可能性が高い)

    public void setNumber(int number)
    {
        if (number < 0)
        {
            throw new Exception("Number can't be less than 0");
        }
        else
        {
            this.number = number
        }
    }

以下のコメントで Raveesh Sharma が指摘したように、これがすべてのインスタンス変数をプライベートとして宣言する必要がある理由です。

于 2012-04-16T13:42:13.043 に答える
0

これは、カプセル化のオブジェクト指向の原則の一般的な実装です。セッターを使用する利点がないか、ほとんどない場合がたくさんあります。ただし、見つけにくいバグを回避できる場合もあります。

 Class Person 
 Integer age;
 ....
 setAge(Integer age )
 {
 if (this.age<age || age>120)
  {
    Throw new RuntimeException("The age: "+age+"is invalid");

 }
 else {
  this.age=age;
 }

プログラムが複雑になるにつれて、これはエラーを早期に発見するのに役立ちます。プログラムが時間の経過とともにどのように進化するかを事前に知ることはできないため、多くの場合、注意を怠ってゲッター/セッターを使用して開始することをお勧めします。ほとんどの IDE では、これをかなり簡単に行うことができます。

于 2012-04-16T13:44:06.507 に答える
0

特定のインスタンスから属性に直接アクセスして値を割り当てることはできますが、それは Java オブジェクト指向の原則の基本に反することは明らかです。

Java OO のベストプラクティスでは、クラスの属性をプライベートにしてカプセル化し、getter/setter を介して属性にアクセスできるようにすることをお勧めします。

この原則を適用することは、クラス間の結合を減らす 1 つの方法です。

于 2012-04-16T13:45:15.263 に答える
0

or (ゲッター メソッドおよびセッター メソッドとして知られています)を使用する必要はありませんが、Java でクラス レベルのプロパティにアクセスするには、or を使用することをお勧めします。これはオブジェクト指向プログラミングで使用される基本原則であり、カプセル化と呼ばれ、所有権、プライバシー レベル、オブジェクト ツリー内の階層などに基づいて、どのオブジェクトがどのプロパティにアクセスできるかを定義します。getProperty()setProperty()

また、プロパティを同期させるなど、より高度な操作を行うこともできます。これにより、プロパティにアクセスするときに順序が保持されていることを確認できるため、順不同で値を上書きすることはありません。

私が最初にプログラミングを学んだとき、これらすべてのことは私には明らかではありませんでしたが、プログラミングについて学ぶにつれて、その理由と利点が明らかになり、より理にかなっています.

于 2012-04-16T13:45:56.083 に答える