4

get メソッドを Java クラスに記述した後、get メソッドを同じクラスで使用するのと、変数自体で使用するのとではどちらがよいでしょうか?

例えば:

if(a.getWidth()>this.getWidth())

また:

if(a.getWidth()>this.width)

また、 this.anything をあまり使用する必要があるかどうかも混乱しています。同じ種類のオブジェクト同士を比較すると読みやすかったようです。

4

6 に答える 6

3

getter メソッドを使用する方が保守性が高いと思います。Null Object パターンを考えてみましょう。これを実現する方法は、次のようにすることです。

public String getName(){
    if (this.name == null){
        this.name = "";
    }
    return this.name;
}

これにより、変数を操作する前に多くの null をチェックする必要がなくなります。

public boolean isCorrect(){
    if(this.name != null && this.name.isEmpty()){
        //The null check up is boilerplate code
        return false;
    }else{
        return true;
    }
}

私はむしろこれを書きたい:

public boolean isCorrect(){
    if(this.getName().isEmpty()){
        //The null check up is boilerplate code
        return false;
    }else{
        return true;
    }
}

もちろん、これはこのパターンを採用するかどうかによって異なります。

また、あなたが持っていることを考慮してください

double width;
double height;

public double getWidth(){
    return this.width;
}

しかし、ある時点で、クラス用に変更することに決めましたが、プログラムが故障しないようにメソッドはまだあります。

Dimension dimension;
public double getWidth(){
    return this.getDimension().getWidth();
}
// etc...

最後に (MadProgrammer のコメントによると)、継承を使用すると、メソッドをオーバーライドして、目的のオブジェクトをより適切に表現できます。

于 2013-01-24T04:43:38.247 に答える
3

同じクラスまたは変数自体でgetメソッドを使用する方が良いですか?

IMHOは変数を使用します。アクセサ メソッドは、主に他のオブジェクトが使用するためのものです。

また、 this.anything をあまり使用する必要があるかどうかも混乱しています。同じ種類のオブジェクト同士を比較すると読みやすかったようです。

あなたが言ったように、参照を明示的に使用することは必ずしも必要ではありませんthis..主に読みやすさのために使用されます。

于 2013-01-24T04:21:40.080 に答える
2

1) クラス内からはフィールドとゲッターの使用に違いはないように見えるかもしれませんが、ゲッターがサブクラスによってオーバーライドされるとどうなるでしょうか?

class A {
    String name;
    String address;

    String getName() {
        return name;
    }

    String getAddress() {
        return address;
    }

    String getDescription() {
        return name + " " + address;
    }
}

class B extends A {
    String country;
    @Override
    String getAddress() {
        return super.getAddress() + ", " + country;
    }
}

B.getDescription() は拡張アドレスを返すことが期待されていますが、そうではありません。A.getDescription() が次のように実装されていれば、

        return getName() + " " + getAddress();

this2) IDE はthis別の色でマークするため、個人的には読みやすさのために使用しません。

于 2013-01-24T04:57:19.490 に答える
0

アクセサーまたは変数自体のいずれかを使用できます。これは、個人的な好みのものの 1 つです。

関数を呼び出すオーバーヘッドがないため、変数自体を使用することを好む人もいます。ただし、変数の値に制限がある場合は、アクセサーとミューテーターのみを使用する方がクリーンな場合があります。特にサブクラス化する場合。しかし、それはどちらの方向にも進むことができるものの1つです。

私がこのキーワードを好んで使用する方法は、this常にインスタンス変数に使用することです。どこでインスタンス変数を使用しているか、どこでローカル変数を使用しているかを視覚的に判断できるため、コードが読みやすくなります。繰り返しますが、これは個人的な好みの問題です。

主なことは、コードがクリーンで読みやすいことを確認することです。また、組織が使用しているコーディング標準に従っていることを確認し、一貫性を保つようにしてください。

于 2013-01-24T04:36:11.303 に答える
0

get メソッドが何らかのフォーマットでデータを返す場合は、get メソッドを使用する必要があります。それ以外の場合は、変数自体を使用しても問題ありません。

これは、メソッド パラメーターがメンバー変数と同じ場合にのみ必要です。それ以外の場合、これは必須ではありません。

例えば:

private String str;

public void setString(String str){
   this.str = str;  // here this.str is necessary because this represents the memeber variable
}

public String getString(){
    return this.str; // here this is optional and you can simply omit it 
}
于 2013-01-24T04:30:29.797 に答える
0

パラメーターがフィールドと同じ名前を持つ場合 (コンストラクターなど) がない限り、これを使用する必要はありません。

プロパティにアクセスする場合、パブリック ゲッターを使用すると、長期的には有益な場合があります。これは、何らかの形式の処理をプロパティに追加したい場合があり、あらゆる場所でゲッターを使用する場合、その変更を行う必要があるのは 1 回だけです。

于 2013-01-24T04:22:16.123 に答える