你並不需要在Java中編寫「this」關鍵字。但無論如何,這樣做更好嗎?對你的風格進行均勻化是否有意義,即,如果你使用「this」一次,每次暗示它都使用它?還是有一個地方,你會永遠使用它和其他你永遠不會使用它的地方?Java:什麼被認爲更具可讀性,「this」或否「this」
回答
一般的共識是,只有在有需要時才應使用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.
}
}
有代碼,在那裏你可以不要跳過this
關鍵字有些地方,例如setter方法:
public void setValue(String value) {
this.value = value;
}
但如果可能的話,最好跳過:
public String getValue() {
return value;
}
那麼,實際上你可以簡單地使用其他名稱作爲參數,因爲在Java中沒有關鍵字參數,因此這不會改變API。 – Bakuriu 2013-02-18 09:11:39
正如你應該避免多餘的語法無論它可能出現的一般規則。你會看到很多相反的觀點,主要是指一個完全神話般的程序員,他不知道成員變量,不知道括號是什麼,並且不記得他在第三中被教導的操作符優先級的規則年級。 40年來我從未見過他。假設他(a)不理解它並且(b)因此破壞它,這是不足以證明毀壞你的代碼的。我從來沒有見過這種事發生。
我看到的有是由這樣的人產生的代碼。這不是爲自己的代碼貶低自己的代碼的原因。實際上某人竟然錯誤地重寫了我的一段代碼的場合恰恰是兩個:一次是在1979年,有人重構了一個語法來刪除操作符的優先級,這是愚蠢的,他不應該完成它和大約在1992年的另一次,但在這兩種情況下,我都不可能寫出可以阻止它的語法或代碼。
在方法調用的情況下,如果您使用的是OuterClass.this.method()
,則只有時間使用this
很重要。
class OuterClass {
void method() { }
class InnerClass {
void method() {
OuterClass.this.method(); // not the same as method().
}
}
}
按規定我傾向於不使用它 - 如果你可以減少冗餘代碼,那麼就更好了。
有然而,有三種是我能想到的地方不能避免這個關鍵字的地方:
構造函數(在同一類委託給另一個構造)
public MyClass() { this("Default Parameter");
同步上當前對象
synchronized(this) {
傳遞當前對象到其他類
public void methodOne() { anotherClass.doSomething(this);
有時你需要它在構造函數中,其中的字段名稱相同的參數,但是這個心不是真的強制性的,因爲你可以簡單地重命名放慢參數:
public MyClass(String data) {
this.data = data
除了這些我想不出太多其他的場景中我使用this
關鍵字。我已經看到它被濫用(在每個方法和字段引用上),這會使代碼很難閱讀。
只有在您必須或者您認爲它增強了代碼可讀性時才使用它。
- 1. 爲什麼`CClientDC dc(this);`不能被`CClientDC dc = CClientDC(this)'替換;`
- 2. 在Swift中,爲什麼「let _ = this」更快,那麼「this!= nil」?
- 3. 爲什麼不是typeof(this)或sizeof(this)有效?
- 4. 爲什麼'this'與obj.var
- 5. 爲什麼synchronized(this)有效?
- 6. 使用$ this,self ::,parent ::代碼可讀性
- 7. jQuery:'$(this)'和'this'有什麼區別?
- 8. <form action =「javascript:alert(this);」>什麼是「this」?
- 9. 爲什麼`this`不等於`Object`,爲什麼屬性`undefined`?
- 10. 「this」關鍵字在Java的「.addActionListener(this)」中引用了什麼?
- 11. $(this)OR event.target或var input = $(this)
- 12. 「this」,「$ this」和「$(this)」之間的區別是什麼?
- 13. 「this」是指什麼
- 14. 「this」是指什麼?
- 15. 爲什麼'this'可以用作Java中的參數?
- 16. 爲什麼Yii允許我使用$ this-> property訪問私有$ this - > _屬性?
- 17. $(this +「selector」)? $(「img」,this)可能嗎?
- 18. TypeScript - 'this'默認爲'any'
- 19. 爲什麼人們在許多jQuery插件中分配$ this = $(this)?
- 20. 在JQuery中,爲什麼$(this)== $(this)返回false?
- 21. 在jQuery中,爲什麼$ .clone(this)與$(this).clone()相同?
- 22. 幫助js函數解釋 - 爲什麼$ this = $(this)...?
- 23. 什麼時候在Java中使用「this」
- 24. Java中this()的含義是什麼
- 25. Jquery $(this)不被稱爲
- 26. $(this)在.click(function(){...})中爲空,爲什麼?
- 27. 爲什麼gradle lint認爲省略號字符「…」比「...」更具可讀性?
- 28. $(this)不可用 - 我錯過了什麼?
- 29. 是否可以使用var $ this = $(this);還是有更好的/更被接受的方式?
- 30. 父::或$ this->
這是總是困惑我的東西。作爲一般規則,儘可能地避免它,但是然後很多人調用實例屬性/成員,名稱以'm'開頭,以提醒您它是一個實例成員...爲什麼不忽略' m'並做'this.theMemberName'? – Bakuriu 2013-02-18 09:09:59
@Bakuriu怪匈牙利人! http://en.wikipedia.org/wiki/Hungarian_notation 我相信這是貫穿歷史的整個「黑客懶惰」主題。因爲m_theMemberName比this.theMemberName短,所以他們傾向於喜歡前者。 – Soyuz 2013-02-18 09:13:12
我喜歡在同一類的對象作爲參數使用'this',例如'equals()'和'compareTo()' – 2013-02-18 10:06:48