Java 此代码示例中此引用的关键字是什么?
Java 此代码示例中此引用的关键字是什么?,java,android,Java,Android,NewPlanet.this引用了什么上下文?为什么类Toast中的makeText需要此上下文?我理解在引用类时使用关键字this以及在this.field中使用点符号访问其字段和构造函数时,但是当this关键字位于类引用之后时会怎样呢?NewPlanet。这是对外部类的this的引用。实际上,您使用的是匿名内部类 实例NewPlanet。此表示外部类NewPlanet的对象。如果您只使用了this,它将表示匿名类OnClickListener的实例 编译后,您将得到如下结果: marsIma
NewPlanet.this
引用了什么上下文?为什么类Toast
中的makeText
需要此上下文?我理解在引用类时使用关键字this
以及在this.field
中使用点符号访问其字段和构造函数时,但是当this
关键字位于类引用之后时会怎样呢?NewPlanet。这是对外部类的this
的引用。实际上,您使用的是匿名内部类 实例NewPlanet。此
表示外部类NewPlanet
的对象。如果您只使用了this
,它将表示匿名类OnClickListener
的实例
编译后,您将得到如下结果:
marsImage.setOnClickListener$1(新的OnClickListener$1(this))代码>
它是对调用onCreate()方法的NewPlanet的引用,因此它是对封闭的外部类实例的引用,而不是对NewPlanet类的引用?是的。如果要访问其类的引用,可以执行NewPlanet.this.getClass()
。
public class NewPlanet extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add);
ImageView marsImage = (ImageView) findViewById(R.id.imageMars);
marsImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
WorldGen mars = new WorldGen("Mars", 642, 3.7);
mars.setPlanetColonies(1);
Toast.makeText(NewPlanet.this, "Mars Created", Toast.LENGTH_SHORT).show();
}
});
}
}
static class OnClickListener$1 implements OnClickListener {
private final NewPlanet ref;
OnClickListener$1(NewPlanet ref) {
this.ref= ref;
}
@Override
public void onClick(View v) {
WorldGen mars = new WorldGen("Mars", 642, 3.7);
mars.setPlanetColonies(1);
Toast.makeText(ref, "Mars Created", Toast.LENGTH_SHORT).show();
}
}