2011-10-18 70 views
4

我只是好奇this的使用,因爲Android的示例代碼和文檔不使用this關鍵字(我喜歡相信android工程師一般都很聰明,因此我使用它們作爲基礎)。我只是好奇的android工程師沒有使用this太多的潛在原因。在Java中使用`this`是不好的做法嗎?

+0

你可以舉一個例子,你不能沒有這個* *嗎? – Gleno

+0

使用'this'是一個很好的做法,但不確定有關android。可能與關鍵值編碼有關。 – Shahzeb

+0

我想我可以沒有它,但個人而言,我發現它更容易使用它。這對我來說更加明確,因此更加清晰。 – cesar

回答

7

它主要是一種風格上的差異。我還沒有看到爲什麼它的好壞有爭論。我個人喜歡使用它,但有些情況下需要使用它。

例如,如果您有一個匿名內部類想要調用父類的方法,您需要this。示例:

class MyClass{ 
    protected void doSomething(){ 

    } 

    OnClickListener n = new OnClickListener(){ 
     public void onClick(View v){ 
      MyClass.this.doSomething(); 
     } 
    }; 

} 

使用this的另一個原因是如果一個方法參數掩碼成員變量。在這種情況下,您可以使用this來區分這兩者,但我建議您將參數重命名爲非掩碼。

class MyClass{ 
    protected int val; 

    public void setVal(int val){ 
     this.val = val; // set the member variable equal to the method argument 
    } 

} 

使用this另一個原因是從該實例中一個指針傳遞給當前類實例時。這方面的一個例子是,當你創建一個新Intent

Intent i = new Intent(this, NewActivity.class); 

可能有更多的地方,你將需要使用this。這是頭幾個想到的。

+0

僅當您想訪問當地實例中被本地範圍內的其他東西隱藏的某些部分時,才需要使用它。在你的內部類中不需要它,因爲OnClickListener沒有隱藏MyClass#doSomething()的doSomething()。 – jackrabbit

1

這並不重要,但如果您在代碼中使用「this」,請確保您在任何地方都使用它。這使你的代碼清晰。

0

不,它不是在android的示例代碼中引用了'this',但沒有理由認爲它是一種不好的習慣。很多時候它是不必要的,爲簡潔起見,它可能已被省略。

例如,從其定義的類中調用methodA()可稱爲this.methodA()。在這種情況下,這是不必要的,因爲這是您撥打電話時所隱含的。它通常用於參數名稱與您正在設置的變量名稱相同的setter中。

public void setName(String name) { 
    this.name = name; 
} 
1

是什麼讓你認爲是這樣?例如。 SDK coding style guide沒有提及,我已經看到這在各個地方使用。但是,按照變量的命名規則,通常不需要並且可以省略,這通常是這種情況。

當提到一個使用this關鍵字的實例雖然很清晰,但是由於doc提到沒有真正強制的樣式,並且遵循命名規則使得它不是必需的。

例如有沒有這個跟隨命名一個完全有效的制定者可能是

private int mCounter; 
    public void setCounter(int counter) { 
     mCounter = counter 
    } 

private int increment; 
public void setIncrement(int increment) { 
    this.increment = increment 
} 

注意的是,在第一個例子中,你可以,但不必須使用此。在第二個你必須和第一個它可能更接近風格指南..

+0

我只是假設他們不喜歡'this',因爲我看到的大多數示例代碼和文檔都沒有使用它。它使文檔更難以閱讀,因爲他們會提到一個方法,比如'startService()',我不知道包含'startService()'的類。 – cesar

+0

方法調用它是不同的。如果沒有限定符,它會自動使用this.something(),這在Java中通常很少使用。我不會使用它。 –

+0

*「我只是假設......」* - 共識是你錯了。 –

0

使用this更是一個安全措施的:

class MyClass{ 
    void doSomething() { 
    } 

    OnClickListener n = new OnClickListener() { 
     void doSomething() { 
     } 

     public void onClick(View v){ 
      MyClass.this.doSomething(); // MyClass#doSomething() 
      this.doSomething(); // OnClickListener#doSomething() 

      doSomething(); // OnClickListener#doSomething() if present, 
          // MyClass#doSomething() otherwise - danger! 
     } 
    }; 
} 

由於存在這樣的情況你無法控制一個部件的存在或方法(例如,當OnClickListener是第三方類),以得到一個可預測的行爲,你應該總是有資格這樣的參考。除非變量行爲正是你想要的。

相關問題