class_name.this与此有何不同
我看到一些代码使用class_name.this
作为其上下文的参数,有时直接在另一个演示代码中使用this
。 我可以假设this
是class_name.this
的缩写吗?
如果类引用可以类型转换为Context,我们使用this
。 当this
对象不可能时,我们使用ClassName.this
(但是只有当类是Context类的子/超子[ 子类 ]时才会这样。比如Activity / Services)
阅读Android上的“上下文”是什么?
让我通过示例代码解释(例如我使用Activity
和AsyncTask
)
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); this.startActivity(intent); // or MainActivity.this.startActivity(intent); // Both are same here. } private class TestTask extends AsyncTask { @Override protected Void doInBackground(Void... params) { // TODO Auto-generated method stub return null; } @Override protected void onPostExecute(Void result) { this.startActivity(intent); // You can not do. Because "this" is the current object of AsyncTask not of Activity. // So you can only use MainActivity.this.startActivity(intent); } } }
1.In Outer Class you directly use "this" reference 2.In Inner Class Or Abstract Class implementation Or Interface implementation use "classname.this" reference
这是一种特殊的语法,允许从内部类访问外部类实例。 考虑一下
class X { class Y { void y() { Object y = this; Object x = X.this; } } }
ClassName.this
允许您甚至在嵌套类中引用外部类。
例如, MyClickListener
嵌套在MainAcvitiy
:
private class MyClickListener implements OnClickListener { @Override public void onClick(View v) { Toast.makeText(MainActivity.this, "I have been clicked", Toast.LENGTH_SHORT).show(); } }
你需要对MainActivity.this
的引用,因为它的当前值是MyClickListener
,你不想在这里传递对Activity的引用
这用于引用类的当前或实时实例,但是在必须使用嵌套类并且嵌套类想要访问外部类的成员然后使用class_name.this来完成它的情况下,因为它将清楚哪个类u指的是。
参考这个问题: –
Class.this和Java之间有什么区别