回答:
これにはチュートリアルは実際には必要ありません。カプセル化について読む
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;
}
someObj.getTime().setHour(5)
ても、someObj
の内部状態に影響を与えないはずです。また、セッターおよびゲッター(アクセサとミューテーターはその名のとおりの名前)には、非常に厳密なメソッドシグネチャがあり、ゲッターにはパラメーターがありません。一般に、メソッドは1つのことだけを実行する必要があります。
this
より具体的なスコープを持つものとの競合がない限り、キーワードはオプションです。あなたが与えた例では、作成されたセッターは、フィールド名と一致する名前の単一のパラメーターを持ちます。したがってthis.fieldName = fieldName
、は、フィールドに割り当てられているパラメーターではなく、フィールドに割り当てられているパラメーターを区別するために使用されますfieldName = fieldname
。ゲッターにはそのような競合はありません。
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;
}
}
メンバーを公開する代わりにゲッターとセッターを使用する理由は、インターフェイスを変更せずに実装を変更できるようになるためです。また、リフレクションを使用してオブジェクトを検査する多くのツールとツールキットは、getterとsetterを持つオブジェクトのみを受け入れます。たとえば、JavaBeansには、ゲッターとセッター、およびその他の要件が必要です。
error: invalid method declaration; return type required
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);
}
}
プログラムを実行すると、プログラムはメインで開始し、
setTime()
はオブジェクトcによって呼び出されますtime
は、渡された値に設定されますgetTime()
はオブジェクトcによって呼び出されますtod
、tod
印刷されます「ゲッターメソッドとセッターメソッドがなぜ邪悪なのか」もお読みください。
getter / setterメソッドはJavaでは一般的ですが、特にオブジェクト指向(OO)ではありません。実際、それらはコードの保守性を損なう可能性があります。さらに、ゲッターメソッドとセッターメソッドが多数存在することは、プログラムがオブジェクト指向の観点から必ずしも適切に設計されていないことを示しています。
この記事では、getterとsetterを使用すべきでない理由(およびそれらをいつ使用できるか)を説明し、getter / setterの考え方を打ち破るのに役立つ設計方法を提案します。
以下は、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)
彼らは素晴らしいので、私はこれらの多くを使用しました。私は自分のコーディング+アニメーションを使いこなすときに使用します。たとえばNumber
、Webページにその番号を表示するを処理するセッターを作成します。セッターを使用すると、トゥイナーを使用して古い番号を新しい番号にアニメーション化します。最初の数値が0で、10に設定すると、数値が0から10にすばやく反転することがわかります。たとえば、0.5秒です。ユーザーはこれを気に入っており、作成するのは楽しいです。
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;
}
}
?>
引用:
以下は、Javaでゲッターとセッターを使用する最も簡単な方法を説明する例です。より簡単な方法でこれを行うことができますが、ゲッターとセッターには、継承で子クラスの親クラスのプライベートメンバーを使用する場合に特別なものがあります。ゲッターとセッターを使うことでそれを可能にすることができます。
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();
}
}