【发布时间】:2017-12-01 14:08:24
【问题描述】:
实际上在 Android 中,使用 OnClick 侦听器对象使用 Intent 移动到不同的活动时,我使用了 sn-p
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Set the content of the activity to use the activity_main.xml layout file
setContentView(R.layout.activity_main);
TextView numbers = findViewById(R.id.numbers);
numbers.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startActivity(new Intent(**MainActivity.this**, NumbersActivity.class));
}
});
}
}
但即使是下面的 sn-p 也能正常工作
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Set the content of the activity to use the activity_main.xml layout file
setContentView(R.layout.activity_main);
TextView numbers = findViewById(R.id.numbers);
numbers.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startActivity(new Intent(**new MainActivity()**, NumbersActivity.class));
}
});
}
}
为了突出差异,我想在 ... 中标记差异。这是否意味着在尝试访问匿名内部类的外部类时,我们必须在内部类中使用 sn-p "OuterClass.this" 来访问它。但是当我在匿名内部类中使用“new OuterClass()”而不是“OuterClass.this”时,即使这样也会给出正确的结果。我想问一下这两种格式是否相同,或者它们是否有任何隐藏的差异。
【问题讨论】:
-
你甚至无法比较这两种情况...java的基础
operator new和this...显然Intent构造函数期望将任何上下文对象作为第一个参数 -
但它们都给出相同的结果
-
不,第二个不应该工作,因为你不应该在 android 平台上创建 Activity 派生类的实例...... 同样在第一种情况下,你将外部类实例作为参数传递,在第二种情况下你正在传递同一个类的新实例 ...在开始android编程之前你应该学习一些java的基础
-
非常抱歉......它不起作用......我明白了......但两者都返回外部类的对象。不同之处在于一个正在创建一个全新的对象,而另一个正在引用当前的 Outer 类实例……如果我错了,请纠正我。
标签: java android this anonymous-inner-class