2013-02-18 54 views
8

你並不需要在Java中編寫「this」關鍵字。但無論如何,這樣做更好嗎?對你的風格進行均勻化是否有意義,即,如果你使用「this」一次,每次暗示它都使用它?還是有一個地方,你會永遠使用它和其他你永遠不會使用它的地方?Java:什麼被認爲更具可讀性,「this」或否「this」

+3

這是總是困惑我的東西。作爲一般規則,儘可能地避免它,但是然後很多人調用實例屬性/成員,名稱以'm'開頭,以提醒您它是一個實例成員...爲什麼不忽略' m'並做'this.theMemberName'? – Bakuriu 2013-02-18 09:09:59

+0

@Bakuriu怪匈牙利人! http://en.wikipedia.org/wiki/Hungarian_notation 我相信這是貫穿歷史的整個「黑客懶惰」主題。因爲m_theMemberName比this.theMemberName短,所以他們傾向於喜歡前者。 – Soyuz 2013-02-18 09:13:12

+0

我喜歡在同一類的對象作爲參數使用'this',例如'equals()'和'compareTo()' – 2013-02-18 10:06:48

回答

18

一般的共識是,只有在有需要時才應使用this,而不是在任何其他時間。

private String param; 
public Construct(String param) { 
    // Usually the only place you need to use this. 
    this.param = param; 
} 

// A less common use of this 
public Function() { 
    synchronized(this) { 
    // Some synchronized stuff. 
    } 
} 
2

有代碼,在那裏你可以不要跳過this關鍵字有些地方,例如setter方法:

public void setValue(String value) { 
    this.value = value; 
} 

但如果可能的話,最好跳過:

public String getValue() { 
    return value; 
} 
+0

那麼,實際上你可以簡單地使用其他名稱作爲參數,因爲在Java中沒有關鍵字參數,因此這不會改變API。 – Bakuriu 2013-02-18 09:11:39

3

正如你應該避免多餘的語法無論它可能出現的一般規則。你會看到很多相反的觀點,主要是指一個完全神話般的程序員,他不知道成員變量,不知道括號是什麼,並且不記得他在第三中被教導的操作符優先級的規則年級。 40年來我從未見過他。假設他(a)不理解它並且(b)因此破壞它,這是不足以證明毀壞你的代碼的。我從來沒有見過這種事發生。

我看到的是由這樣的人產生的代碼。這不是爲自己的代碼貶低自己的代碼的原因。實際上某人竟然錯誤地重寫了我的一段代碼的場合恰恰是兩個:一次是在1979年,有人重構了一個語法來刪除操作符的優先級,這是愚蠢的,他不應該完成它和大約在1992年的另一次,但在這兩種情況下,我都不可能寫出可以阻止它的語法或代碼。

-1

在方法調用的情況下,如果您使用的是OuterClass.this.method(),則只有時間使用this很重要。

class OuterClass { 
    void method() { } 

    class InnerClass { 
     void method() { 
      OuterClass.this.method(); // not the same as method(). 
     } 
    } 
} 
+1

這不是唯一的時間。也有一種情況,即有一個參數或一個具有相同名稱的局部變量。 – EJP 2013-02-18 09:27:18

+0

@EJP我在方法調用的背景下講話。 – 2013-02-18 09:31:33

+0

在限制上下文到方法調用的問題中沒有任何問題。沒有用。 – EJP 2013-02-18 11:36:25

6

按規定我傾向於不使用它 - 如果你可以減少冗餘代碼,那麼就更好了。

有然而,有三種是我能想到的地方不能避免這個關鍵字的地方:

  • 構造函數(在同一類委託給另一個構造)

    public MyClass() { 
        this("Default Parameter"); 
    
  • 同步上當前對象

    synchronized(this) {

  • 傳遞當前對象到其他類

    public void methodOne() { 
        anotherClass.doSomething(this); 
    

有時你需要它在構造函數中,其中的字段名稱相同的參數,但是這個心不是真的強制性的,因爲你可以簡單地重命名放慢參數:

public MyClass(String data) { 
    this.data = data 

除了這些我想不出太多其他的場景中我使用this關鍵字。我已經看到它被濫用(在每個方法和字段引用上),這會使代碼很難閱讀。

只有在您必須或者您認爲它增強了代碼可讀性時才使用它。

相關問題