class_name.this和this之间有什么不同

时间:2013-09-17 05:18:51

标签: java android

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

5 个答案:

答案 0 :(得分:5)

如果类引用可以类型转换为Context,则使用this。当this对象不可能时,我们使用ClassName.this(但是只有当类是Context类的子/超级子[ subclass ]时才这样。比如Activity / Services )


阅读What is 'Context' on Android?


让我通过示例代码解释(例如我使用ActivityAsyncTask

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