java - 此代码示例中的关键字 this 引用什么?

标签 java android

<分区>

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();
        }
    });
 }
}

NewPlanet.this 引用了什么上下文?为什么 Toast 类的 makeText 需要这个上下文?我理解在引用类时使用关键字 this 并使用点符号访问其字段和构造函数,如 this.field 中一样,但是当 this 关键字出现在类引用之后?

最佳答案

NewPlanet.this 实例表示作为外部类的 NewPlanet 的对象。如果您只使用了 this,它将代表匿名类 OnClickListener 的实例。

编译后你会得到这样的东西:

marsImage.setOnClickListener$1(new OnClickListener$1(this));

 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();
        }
    }

关于java - 此代码示例中的关键字 this 引用什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24741315/

相关文章:

android - 来自 Google 的电子邮件 - 缺少 64 位架构

java - 在 JVM 规范中,也没有关于实例的表达式 "symbolic reference to an object"...我不明白

java - 解压缩过程适用于一个 zipper ,但不适用于另一个 zipper ?

java - 如何比较数组中的值(整数)并将最小值存储为单独的变量?

java - netbeans-如何使用Restful webservice的.war文件?

android - 导航组件共享元素转换适用于输入,但不适用于弹回

android - 如何在 Android 中创建自定义 ListView?

android - 如何知道卫星已经在 android 上找到或正在搜索?

java - c中的注释方法

c# - 'CryptoStream' 的最佳重载没有名为 'leaveOpen' 的参数