![](/img/trans.png)
[英]Java - How am I accessing non final variables from an anonymous inner class?
[英]How am I accessing my main class from an anonymous class?
我以為我很清楚自己在做什么,但每當我覺得自己能夠很好地掌握某些東西時,我就證明錯了:)
有問題的代碼就是這個
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mButton = (Button)findViewById(R.id.m_button);
mButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
startActivity(intent);
}
});
}
我的困惑在於new Intent()
和startActivity
方法。
我假設只要我們在一個匿名類View.OnClickListener
,我就必須做一些像MainActivity.this.startActivity(intent);
當我不在匿名類中時,我可以簡單地執行new Intent(this,SecondActivity.class);
有人可以解釋為什么我能夠調用startActivity();
方法,但不能只在intent參數中使用this
?
在匿名內部類的情況下, this
是匿名類本身。 要訪問外部類this
從一個匿名你需要做的OuterClassName.this
。
但是,允許內部類從外部類訪問變量和方法。 內部階級是否是匿名的,無論如何都沒有區別。
看到:
這是靜態和非靜態內部類之間最重要的差異之一。
如果(例如)你在兩個類中都有一個具有相同名稱的方法,那么你只需要類名,這樣它就可以告訴你的意思。 這就是與發生this
,內和外班有this
-所以它默認為內部一個,除非你說,否則。
從內部類中,您可以使用新的Intent(MainActivity.this, AnotherActivity.class)
因為它是一個this
的外活動,而不是內部類的this
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.