我看到一些代码使用class_name.this
作为其上下文的参数,有时在另一个演示代码中直接使用this
。我可以假设this
是class_name.this
的缩写吗?
答案 0 :(得分:5)
如果类引用可以类型转换为Context,则使用this
。当this
对象不可能时,我们使用ClassName.this
(但是只有当类是Context类的子/超级子[ subclass ]时才这样。比如Activity / Services )
阅读What is 'Context' on 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<Void, Void, Void> {
@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 :(得分:2)
1.In Outer Class you directly use "this" reference
2.In Inner Class Or Abstract Class implementation Or Interface implementation use "classname.this" reference
答案 2 :(得分:1)
这是一种特殊的语法,允许从内部类访问外部类实例。考虑一下这个
class X {
class Y {
void y() {
Object y = this;
Object x = X.this;
}
}
}
答案 3 :(得分:1)
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
的引用,因为this
的当前值为MyClickListener
,您不想在此处传递对活动的引用
答案 4 :(得分:0)
这个用于引用类的当前或实时实例,但是在你必须使用嵌套类并且嵌套类想要访问外部类的成员然后使用class_name完成它的情况下。这会明确你指的是哪个班级。
参考这个问题: -
What is the difference between Class.this and this in Java