web-dev-qa-db-ja.com

ゲッターとセッターはどのように機能しますか?

私はphpの世界から来ました。ゲッターやセッターとは何か、またその例を教えてください。

103
ajsie

チュートリアルは実際には必要ありません。詳しく読む カプセル化

private String myField; //"private" means access to this is restricted

public String getMyField()
{
     //include validation, logic, logging or whatever you like here
    return this.myField;
}
public void setMyField(String value)
{
     //include more logic
     this.myField = value;
}
125
Paul Creasey

Javaでは、ゲッターとセッターはまったく普通の機能です。それらをゲッターまたはセッターにする唯一のことは規約です。 fooのゲッターはgetFooと呼ばれ、セッターはsetFooと呼ばれます。ブール値の場合、ゲッターはisFooと呼ばれます。また、この例の 'name'の取得メソッドと設定メソッドに示すように、特定の宣言も必要です。

class Dummy
{
    private String name;

    public Dummy() {}

    public Dummy(String name) {
        this.name = name;
    }

    public String getName() {
        return this.name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

メンバーを公開する代わりにゲッターとセッターを使用する理由は、インターフェースを変更せずに実装を変更できるようにするためです。また、リフレクションを使用してオブジェクトを調べる多くのツールやツールキットは、ゲッターとセッターを持つオブジェクトのみを受け入れます。 JavaBeans 例えば、ゲッターとセッター、およびその他のいくつかの要件が必要です。

37
Mark Byers
class Clock {  
        String time;  

        void setTime (String t) {  
           time = t;  
        }  

        String getTime() {  
           return time;  
        }  
}  


class ClockTestDrive {  
   public static void main (String [] args) {  
   Clock c = new Clock;  

   c.setTime("12345")  
   String tod = c.getTime();  
   System.out.println(time: " + tod);  
 }
}  

プログラムを実行すると、プログラムは主電源で起動します。

  1. オブジェクトcが作成されます
  2. 関数setTime()は、オブジェクトcによって呼び出されます。
  3. 変数timeは、によって渡された値に設定されます。
  4. 関数getTime()がオブジェクトcから呼び出されました
  5. 時間が返されます
  6. todにパスしてtodが出力されます
12
user3137648

また、 " なぜgetterメソッドとsetterメソッドが邪悪なのか "を読むことをお勧めします。

Getter/setterメソッドはJavaでは一般的ですが、特にオブジェクト指向(OO)ではありません。実際、それらはあなたのコードの保守性を損なう可能性があります。さらに、多数のゲッターメソッドとセッターメソッドが存在することは、プログラムがOOの観点から必ずしもうまく設計されていないことを示す赤い旗です。

この記事では、なぜゲッターとセッターを使うべきでないのか(そしていつ使うことができるのか)を説明し、ゲッター/セッターの考え方から抜け出すのに役立つ設計方法論を提案します。

8
superfav

1.最高のゲッター/セッターは賢いです。

これがmozillaからのJavaScriptの例です。

var o = { a:0 } // `o` is now a basic object

Object.defineProperty(o, "b", { 
    get: function () { 
        return this.a + 1; 
    } 
});

console.log(o.b) // Runs the getter, which yields a + 1 (which is 1)

彼らはすごいので、私はこれらのA LOTを使用しました。私のコーディング+アニメーションに夢中になるとき、私はそれを使うでしょう。たとえば、Webページにその番号を表示するNumberを扱うセッターを作成します。セッターを使用すると、 ツイーター を使用して古い番号を新しい番号にアニメートします。最初の数字が0で、10に設定すると、数字が0から10に素早く反転します。たとえば、0.5秒です。ユーザーはこのものが大好きで、作成するのは楽しいです。

2. phpのゲッター/セッター

Sofからの例

<?php
class MyClass {
  private $firstField;
  private $secondField;

  public function __get($property) {
    if (property_exists($this, $property)) {
      return $this->$property;
    }
  }

  public function __set($property, $value) {
    if (property_exists($this, $property)) {
      $this->$property = $value;
    }

    return $this;
  }
}
?>

引用:

2
Jacksonkr

これは、Javaでgetterおよびsetterを使用する最も簡単な方法を説明するための例です。より直接的な方法でこれを行うことができますが、getterとsetterは特別なものを持っています。それは継承の子クラスで親クラスのprivateメンバを使うときです。 getterとsetterを使うことでそれを可能にすることができます。

package stackoverflow;

    public class StackoverFlow 

    {

        private int x;

        public int getX()
        {
            return x;
        }

        public int setX(int x)
        {
          return  this.x = x;
        }
         public void showX()
         {
             System.out.println("value of x  "+x);
         }


        public static void main(String[] args) {

            StackoverFlow sto = new StackoverFlow();
            sto.setX(10);
            sto.getX();
            sto.showX();
        }

    }
1
Bashir ahmad