2012-02-07 36 views
1

我讀過OOP中的很多大型項目,我注意到其中很多人使用this.[variable],[ClassName].[staticVariable]。例如:使用「this」的好處。

public class ABC { 

    private float mX; 
    public static float y;  

    public float getX() { 
     return this.mX; 
    } 

    public float doSomethingWithY() { 
     return ABC.y; 
    } 

} 

即使使用Eclipse自動生成Getters & Setters功能,還配備了this.[variable],雖然這是不必要的,因爲沒有本地變量聲明那裏。

使用這些符號有什麼優點,或者它只是一種代碼風格?

編輯所以有些人不會誤解。我知道this[ClassName].[staticVariable]代表什麼。但在這種情況下,這是不必要的。問題是:即使沒有必要,爲什麼古魯編碼器仍然會添加它?當他們需要更新/修復一個龐大的項目時,是否會有優勢和劣勢?

+0

它的編碼風格......通過了StyleCop使用,默認情況下不被resharper使用。 – Tanmoy 2012-02-07 05:56:02

回答

2

在某些情況下這是必需的,例如this.是需要使用成員變量而不是同名的本地方法參數時需要的。

這對靜態變量也是必要的,您需要指定哪個類要獲取靜態變量(許多類可以定義具有相同名稱的靜態變量)。

除了必要的情況之外,它確實是一種編碼風格。我的建議是,只要它有助於解決潛在的歧義性,就可以使用它

+0

有什麼缺點嗎?使用這種方式我也感到安全,因爲我永遠不會遇到模棱兩可的問題。 – 2012-02-07 06:29:13

+0

除了一些額外的輸入外,沒有任何真正的缺點。去野外。 – mikera 2012-02-07 06:32:00

1

在複雜的方法中,有時很好地區分此類中的實例變量和特定函數中的局部變量。當您使用「this」時,這種區別立即顯而易見。

0

對於小片的代碼也沒關係,但有時會發生這種情況:

 
public float getX() { 
    .... 
    int mX = someFunc() 
    ... 
    return mX; 
} 

在這種情況下,當地的值返回,而不是成員變量。

您通常想要明確表示並說this.mX。不過,你不應該有巨大的功能。

0
this.? '?' is a member variable, this is a reference to the current object. 

看到this

3
與此

基本上,你肯定知道您使用的是類屬性的工作,不與方法中創建的變量或可能收到的參數。

而且,它有助於防止具有相同名稱的本地變量。

而最終的原因:可讀性。

0

它的語法,如果你要訪問一個類的實例變量使用(該對象的引用)。(實例變量名)。就像

A a= new A();// for non static class,this for the current object 
a.(instance variable name) 
// for non static class do the same but use (class name).variable name