从方法访问字段的正确方法是什么?

时间:2012-04-11 11:40:08

标签: java class methods private field

我想从方法中访问类中的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();
    }
}

我只是不明白这一点。我可能只是一个完全白痴,但访问该领域的正确方法是什么?

非常感谢,

5 个答案:

答案 0 :(得分: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);
    }
}

答案 1 :(得分:0)

在您的示例中,sbthis.sb引用同一个对象,该对象是ExampleClass的该实例的字段。你可以使用其中任何一个。

在你的情况下,我只会使用sb,因为没有歧义。在以下情况中使用this会很有用:

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

this.sb是您的类字段,sbsetBuilder方法的参数。

答案 2 :(得分:0)

没有“正确的方法”来做到这一点。我更喜欢不使用this,除非它不明确,因为在IDE中,该字段会为我突出显示,因此我可以看到它正在解析为某个字段。此外,代码中的this太多了this。许多其他人更愿意添加{{1}},因为这样就不会给读者带来歧义。

答案 3 :(得分:0)

我不确定这种情况是否有标准。

基本上“this”是隐含的,在你的情况下没有歧义(如果你有一个具有相同名称的参数,或者超类中的受保护/公共字段,则可能存在歧义)。

我通常使用“this”,但这是个人品味的问题,我发现当我访问类参数时,我更容易快速查看。

答案 4 :(得分:0)

两者本身都在做同样的事情。在这种情况下,使用这个是多余的。