1
class Rocket {
public Rocket() {}
public interface RocketListener {
void RocketLaunched();
}
RocketListener listener;
public void setRocketListener(RocketListener listener) {
this.listener = listener;
}
//When rocket get launched.
listener.RocketLaunched();
}
//first case : when implementing listner
class MyClass implements RocketListener {
Rocket rocket = new Rocket();
rocket.setRocketListener(this);
@Override
public void RocketLaunched() {
//when rockect get launched. it get called
}
}
//second case : when using anonymous class for listner
class MyClass {
Rocket rocket = new Rocket();
rocket.setRocketListener(new RocketListener() {
@Override
public void RocketLaunched() {
//when rockect get launched. it get called
}
});
}
在第一種情況:當MyClass的實現一個接口,那麼參數在setOnClickListener發送()是類的實例。
第二種情況: setOnClickListener()中的參數send是匿名類。就是用聽者更有效的方式:使用匿名類或者實現聽者
問題1:在第二種情況下,匿名類是否持有MyClass的引用?
問題2:這兩種情況下在內存上製作的指紋是什麼?
問題3:哪種情況最適合使用,以提高性能或減少內存?
假設,如果我使用超過1個匿名類,比我應該避免它,而不是它,我應該實現偵聽器。所以,第二種情況可能消耗更多的內存,如果它將在多個地方使用。我對嗎 ? – 2014-09-21 17:38:42
另外我不清楚內存部分。它將如何包含相同的內存空間。 – 2014-09-21 17:48:37