2

我看到一些代码class_name.this用作其上下文的参数,有时this直接在另一个演示代码中使用。我可以假设这this是 的缩写class_name.this吗?

4

5 回答 5

5

this如果类引用可以类型转换为 Context,我们使用when。而当this对象不能是,那么我们使用ClassName.this(但仅当类是上下文类的子/超级子[子类]。如活动/服务)


阅读Android 上的“上下文”是什么?


让我通过示例代码来解释(例如我正在使用Activityand 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 的引用thisMyClickListener

于 2013-09-17T05:42:21.810 回答
0

this用于引用类的当前或活动实例,但如果您必须使用嵌套类并且嵌套类想要访问外部类的成员,则可以使用 class_name.this 完成,因为它将清楚您是哪个类指的是。

参考这个问题:
-Java中的Class.this和this有什么区别

于 2013-09-17T05:24:42.620 回答