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

问题描述:

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

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

非常感谢,

保罗

在你的榜样,sbthis.sb指向同一个对象,这是ExampleClass该实例的领域。你可以使用它们中的任何一个。

在你的情况下,我只是使用sb,因为没有歧义。使用this可在下列情况下是有用的:

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

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

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

有这两个

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); 
    } 
} 

我不知道是否有这种情况的标准。

基本上,“this”是隐含的,在你的情况下,没有歧义(如果你有一个名字相同的参数或者超类中的protected/public字段)。

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

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