什么是从方法访问字段的正确方法
问题描述:
我想从方法访问类中的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();
}
}
我只是不明白这一点。我可能只是一个完全白痴,但访问该领域的正确方法是什么?
非常感谢,
保罗
答
在你的榜样,sb
和this.sb
指向同一个对象,这是ExampleClass
该实例的领域。你可以使用它们中的任何一个。
在你的情况下,我只是使用sb
,因为没有歧义。使用this
可在下列情况下是有用的:
public void setBuilder(StringBuilder sb) {
this.sb = sb;
}
this.sb
是你的类字段,sb
是setBuilder
方法的参数。
答
没有“正确的方法”来做到这一点。我更喜欢不使用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”,但这是个人品味的问题,我发现它更容易快速查看我何时访问类参数。
答
两者本质上都在做同样的事情。在这种情况下使用这是多余的。