0

インスタンス変数のコンストラクターとセッターを自動的に作成するために使用できるIDEがありますが、それらを作成する方法がベストプラクティスではないのではないかと考えていました。これが何をするかです:

private String partNum;
private String partDesc;
private int quant;
private double price;

public Invoice( String partNum, String partDesc, int quant, double price )
{
    this.partNum = partNum;
    this.partDesc = partDesc;
    this.quant = quant;
    this.price = price;
}

私が心配しているのは「this.name」であり、コンストラクターは、パラメーターを構築している変数と同じ名前にラベル付けします。セッターも同じことを行います。設定している変数の名前と同じパラメーター名を使用し、this.nameを使用します。

それで、これに何か問題がありますか?

4

4 に答える 4

3

それが私の好みの方法です。そうしないと、入力パラメーターにさまざまな任意の名前を考える必要があり、それが面倒になります。

于 2013-01-18T23:03:22.353 に答える
1

いいえ、何も悪いことはありません。キーワードはthis、設定しているl値がメンバー変数(つまりthis.partNum)であり、入力パラメーター(partNum)ではないことをコンパイラーに通知するため、あいまいさを解決します。

これが悪い習慣である場合、それは個人的な好みの問題です。メンバー変数と入力パラメーターの両方に同じ名前を使用したくない人もいます。個人的に私はいくつかの理由でこれを頻繁に使用しました:

  • 名前の急増を避ける
  • "this."Eclipseは、名前が:)で始まる場合、名前の自動補完を開始します
于 2013-01-18T23:02:49.967 に答える
1

いいえ、それはまったく問題ではありません。これらは単なる変数名です。左辺値と右辺値は、それらの一意性を維持します。

于 2013-01-18T23:04:09.843 に答える
1

あなたが目撃しているのは、かなり標準的なJavaの慣習であり、Java言語仕様でも言及されています。

ローカル変数として宣言された名前がすでにフィールド名として宣言されている場合、その外部宣言はローカル変数のスコープ全体でシャドウされます(§6.3.1)。同様に、名前がすでに変数またはパラメーター名として宣言されている場合、その外部宣言はローカル変数のスコープ全体でシャドウイングされます(シャドウイングによって§14.4.2のルールの下でコンパイル時エラーが発生しない場合) 。シャドウ名には、適切な修飾名を使用してアクセスできる場合があります。

たとえば、キーワードthisを使用すると、this.xの形式を使用してシャドウフィールドxにアクセスできます。実際、このイディオムは通常、コンストラクター(§8.8)に表示されます。

class Pair {
        Object first, second;
        public Pair(Object first, Object second) {
                this.first = first;
                this.second = second;
        }
}

この例では、コンストラクターは、初期化されるフィールドと同じ名前のパラメーターを取ります。これは、パラメーターに異なる名前を付けるよりも簡単であり、この定型化されたコンテキストであまり混乱することはありません。ただし、一般に、フィールドと同じ名前のローカル変数を使用するのは不適切なスタイルと見なされます。

メソッドへのローカル変数がクラス変数と同じ名前である場合、それらは効果的にそれらの変数を「シャドウ」または非表示にします。thisただし、コンテキストスコープを介してクラス変数を参照することにより、クラス変数にアクセスできます。

于 2013-01-18T23:04:41.590 に答える