我見過ClassName.this
用於SO和其他地方在線的很多Android代碼(而不是簡單的this
關鍵字)來引用類的當前實例。我知道你可能會決定用類名前加this
以消除任何不明確的地方,但以我的經驗來看,這樣做往往是不必要的,因爲this
指的只是一件事 - 代碼的類的當前實例執行英寸是否還有別的我可以忽略的暗示關鍵字this
預設類名永遠是更好的做法,或者是否有任何情況下它實際上是必要的?ClassName的用途是什麼?這超出了消歧?
回答
那裏確實只有一件事是指的。
這是不正確的。
是否還有別的我可以忽略,建議在類名稱前加上這個關鍵字總是更好的做法,或者是否有任何需要的情況?
分別是和是。特別是,內部類需要ClassName.this
才能到達外部類實例this
。
例如:
myButton.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
startActivity(new Intent(MyActivity.this, MyOtherActivity.class));
}
});
在這裏,用的this
代替MyActivity.this
將失敗,編譯錯誤,抱怨Button.OnClickListener
不給Intent
構造一個有效的第一個參數。 MyActivity.this
返回this
即包含Button.OnClickListener
實例的MyActivity
實例。
謝謝。我想這可能是這種情況,但我已經看到它使用超越內部或匿名類的封閉類,所以我覺得不得不查詢SO。 – dcow
+1你的回答永遠是優秀的:) –
@DavidCowden:有時你會從內部類的代碼中看到它,被重構出內部類,但是開發人員在那裏留下了類名限定符,因爲它沒有提出編譯錯誤,他們也沒有選擇刪除它。可能有些開發人員爲了清晰起見而喜歡使用它。 – CommonsWare
我沒有那麼多的回購來發表評論,所以寫下來作爲答案。
我認爲問題的根本關切是檢查是否存在使用classname.this了在開發者已經知道不會有任何內部類的呼叫場景「這個」關鍵字的任何優勢。
當然,在內部類方案的情況下,您必須使用classname.this來調用它的封閉類。但可以有情景,你已經知道這個特定的代碼不會在任何內部類中調用。所以爲什麼要指定classname.this,而不是使用'this'。
那麼我閱讀答案的方式就是這是唯一的原因,所以要回答你的評論,除了引用陰影對象之外沒有其他理由(除非你正在考慮代碼風格偏好等) – dcow
- 1. 這個「javaScript:;」在超鏈接中的用途是什麼?
- 2. 這條線的用途是什麼[超級loadView]
- 3. 提交消息的用途是什麼?
- 4. 這個Mtd的用途是什麼?
- 5. 這些面板的用途是什麼?
- 6. 這個javascript的用途是什麼?
- 7. Classname + $。是什麼導致了它?
- 8. [ClassName class]引發了什麼?
- 9. 「(ClassName *)」的功能是什麼
- 10. layout.xml的用途是什麼?
- 11. PhoneGap的用途是什麼?
- 12. AtomicReferenceArray的用途是什麼?
- 13. felix.xml的用途是什麼?
- 14. WSDL的用途是什麼?
- 15. RegisterFmxClasses的用途是什麼?
- 16. FXCollections.observableArrayList的用途是什麼?
- 17. config.assets.precompile的用途是什麼?
- 18. Rake的用途是什麼?
- 19. _dl_sysinfo_int80的用途是什麼?
- 20. javax.security.auth.callback。*的用途是什麼?
- 21. System.Data.SqlClient.SqlParameter.IsNullable的用途是什麼?
- 22. _GLOBAL__I_的用途是什麼?
- 23. $ _POST的用途是什麼?
- 24. RhoMobile的用途是什麼?
- 25. StandardOpenOption.SPARSE的用途是什麼?
- 26. CreateSilverlight.js的用途是什麼?
- 27. ServicePointManager.ServerCertificateValidationCallback的用途是什麼?
- 28. RegisterGlobalFilters的用途是什麼?
- 29. SDL_opengl_glext.h的用途是什麼?
- 30. NSExpression的用途是什麼?
你可以通過省略'EnclosingClass.this'並簡單地調用'someMethod()'來做到嗎? – dcow
如果'someMethod()'也存在於內部類中,則不是。 –
@EtienneMiret +1同意。 –