2012-04-11 192 views
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(); 
    } 
} 

我只是不明白這一點。我可能只是一個完全白癡,但訪問該領域的正確方法是什麼?

非常感謝,

保羅

回答

0

在你的榜樣,sbthis.sb指向同一個對象,這是ExampleClass該實例的領域。你可以使用它們中的任何一個。

在你的情況下,我只是使用sb,因爲沒有歧義。使用this可在下列情況下是有用的:

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

this.sb是你的類字段,sbsetBuilder方法的參數。

0

沒有「正確的方法」來做到這一點。我更喜歡不使用this,除非它不明確,因爲在IDE中,該字段爲我突出顯示,所以我可以看到它正在解析爲字段。此外,太多的this雜亂的代碼。許多其他人更願意添加this,因爲那樣讀者就不會有歧義。

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

我不知道是否有這種情況的標準。

基本上,「this」是隱含的,在你的情況下,沒有歧義(如果你有一個名字相同的參數或者超類中的protected/public字段)。

我通常使用「this」,但這是個人品味的問題,我發現它更容易快速查看我何時訪問類參數。

0

兩者本質上都在做同樣的事情。在這種情況下使用這是多餘的。

相關問題