2014-07-21 64 views
5

要引用實例變量,我應該使用「this」關鍵字...Java:我應該使用「this」關鍵字還是「m_」前綴?

class Foo 
{ 
    private int bar; 

    public Foo(int bar) 
    { 
    this.bar = bar; 
    } 
} 

或「M_」前綴(匈牙利命名約定,其中M是指「成員變量」)...

class Foo 
{ 
    private int m_bar; 

    public Foo(int bar) 
    { 
    m_bar = bar; 
    } 
} 

有沒有任何情況下,一個比另一個有優勢?

+4

您應該使用'this',因爲它實際上是Java風格和Java語法。 –

+1

這裏有兩個*不同的問題 - 都是主觀的。 1)我不使用'm_',2)當且僅當需要時才使用'this'。 – user2864740

+0

@ user2864740 OP似乎在提出使用「m_」時需要「this」。我相信迄今爲止的共識是不這樣做的。 –

回答

9

this是標準的,更具可讀性且不易出錯。

它會幫助你,當你錯誤地隱藏變量或嘗試訪問靜態代碼中的非靜態字段。

即避免這種

int m_bar; 
public Foo(int m_bar) 
{ 
    m_bar = m_bar; 
} 

和 靜態INT m_bar;

int m_bar; 
public Foo(int bar) 
{ 
    this.bar = m_bar; // a warning static field being accessed as non-static 
} 
+1

我不同意 - 但這是一個主觀的問題/答案。我只*在需要的地方使用'this'(和'm_'根本不需要)。我的IDE(去JetBrains!)告訴我它何時「錯誤」。 – user2864740

+0

你不應該依賴於IDE的錯誤保護 –

+1

我同意這個答案,因爲用戶給出的例子是一個明確的情況,需要消歧。 「m_」不符合駱駝大小寫變量名稱的通用標準,「this」是所使用的通用標準。 –

2

使用this。正是爲這種用法提供了Java語法,開發人員熟悉它,並有助於減少幾個案例中的語法錯誤。

Java中前綴字段名稱可能存在的一個問題是用於生成getter和setter的工具不能正常工作。此外,一些Java Bean工具(如Jackson或GSON)現在需要映射來映射對象字段名稱。最後,因爲它不遵循Java風格或約定,所以maintenance developer不會令人滿意。

相關問題