0

メソッドからクラス内の StringBuilder フィールドにアクセスしたい。フィールドとメソッドの両方が非静的です。私はこれを多くの方法で試しましたが、どの方法でもうまくいくようですが、正しい方法は何だろうと思っていました. これが私が意味することの例です:

public class ExampleClass {
    private StringBuilder sb = new StringBuilder();
    private void call() {
        sb.append("Test"); // I can do it this way
        this.sb.append("Second way"); // or this way
        // does it matter? can someone explain it to me?
    }
    public static void main(String[] args) {
        ExampleClass ec = new ExampleClass();
        ec.call();
    }
}

私はこれを理解していません。私はまったくのばかかもしれませんが、そのフィールドにアクセスする正しい方法は何ですか?

本当にありがとう、

ポール

4

5 に答える 5

2

これら2つの間に違いがあります

sb.append("Test"); // I can do it this way
this.sb.append("Second way"); // or this way

そのコンテキストで。とも呼ばれる他の変数がある場合のみsb

例えば:

public class ExampleClass {
    private StringBuilder sb = new StringBuilder();
    private void call(StringBuilder sb) {
        sb.append("Test"); //refers to the parameter passed to the function
        this.sb.append("Second way"); //refers to your member
    }
    public static void main(String[] args) {
        ExampleClass ec = new ExampleClass();
        StringBuilder sb = new StringBuilder();
        ec.call(sb);
    }
}
于 2012-04-11T11:42:54.220 に答える
0

あなたの例では、同じオブジェクトsbthis.sb参照します。これは、のそのインスタンスのフィールドですExampleClass。どちらでも使用できます。

あなたの場合sb、曖昧さがないので、私はただ使用します。を使用thisすると、次の場合に役立ちます。

public void setBuilder(StringBuilder sb) {
    this.sb = sb;
}

this.sbはクラスフィールドでsbあり、はメソッドの引数ですsetBuilder

于 2012-04-11T11:42:51.773 に答える
0

これを行うための「正しい方法」はありません。thisIDEではフィールドが強調表示されているため、あいまいでない限り使用しないことを好みます。これにより、フィールドに解決されていることがわかります。また、コードが多すぎるthisとコードが乱雑になります。this他の多くの人は、読者にあいまいさの可能性がないため、追加することを好みます。

于 2012-04-11T11:42:52.363 に答える
0

この場合の基準があるかどうかはわかりません。

基本的に「これ」は暗黙的であり、あなたの場合、あいまいさはありません(同じ名前のパラメーター、またはスーパークラスの保護/パブリックフィールドがある場合があります)。

私は通常「これ」を使用しますが、それは個人的な好みの問題であり、クラスパラメータにアクセスしているかどうかをすばやく確認する方が簡単です。

于 2012-04-11T11:43:06.500 に答える
0

どちらも本質的に同じことをしています。この場合、これの使用は冗長です。

于 2012-04-11T11:44:04.157 に答える