2013-09-17 2 views
2

Я вижу некоторый код, использующий class_name.this как параметр для его контекста, а иногда и использую this непосредственно в другом демо-коде. Могу ли я предположить, что this является аббревиатурой от class_name.this?В чем отличие между class_name.this и этим

+0

Возможный дубликат [В чем разница между Class.this и этим в Java] (http://stackoverflow.com/questions/5666134/what-is-the-difference-between-class-this-and-this- in-java) и [Java: Class.this] (http://stackoverflow.com/questions/5530256/java-class-this) , –

ответ

5

Мы используем this, если, если ссылки на классы могут быть напечатаны в соответствии с Контекстом. И когда this объект можите быть, тогда мы используем ClassName.this (но только если класс является ребенок/супер ребенок [подкласс] класса Context. Как активность/Услуги)


Read 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); 
     } 
    } 
} 
0

этот используется для ссылки на текущий или живой экземпляр класса, но в тех случаях, когда u должен использовать вложенные классы, а вложенный класс хочет получить доступ к члену внешнего класса, тогда его сделать с помощью class_name.это, как это будет сделано ясно, к какому классу u относится.

относятся эти вопросы: -
What is the difference between Class.this and this in Java

1

Это специальный синтаксис, который позволяет получить доступ к экземпляру класса внешнего из внутреннего класса. Рассмотрим этот

class X { 
    class Y { 
     void y() { 
      Object y = this; 
      Object x = X.this; 
     } 
    } 
} 
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 
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 и вы не хотите заморачиваться передавая ссылку на операцию здесь

Смежные вопросы