我看到一些代码class_name.this
用作其上下文的参数,有时this
直接在另一个演示代码中使用。我可以假设这this
是 的缩写class_name.this
吗?
问问题
378 次
5 回答
5
this
如果类引用可以类型转换为 Context,我们使用when。而当this
对象不能是,那么我们使用ClassName.this
(但仅当类是上下文类的子/超级子[子类]。如活动/服务)
让我通过示例代码来解释(例如我正在使用Activity
and 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);
}
}
}
于 2013-09-17T05:21:53.320 回答
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
于 2013-09-17T05:28:20.773 回答
1
这是允许从内部类访问外部类实例的特殊语法。考虑这个
class X {
class Y {
void y() {
Object y = this;
Object x = X.this;
}
}
}
于 2013-09-17T05:25:34.983 回答
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();
}
}
您需要对的引用,因为isMainActivity.this
的当前值并且您不想麻烦在此处传递对 Activity 的引用this
MyClickListener
于 2013-09-17T05:42:21.810 回答
0
this用于引用类的当前或活动实例,但如果您必须使用嵌套类并且嵌套类想要访问外部类的成员,则可以使用 class_name.this 完成,因为它将清楚您是哪个类指的是。
参考这个问题:
-Java中的Class.this和this有什么区别
于 2013-09-17T05:24:42.620 回答