[英]Which is more efficient ways to use listener : using Anonymous class or implementing listner
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()中的send參數是該類的實例。
在第二種情況下: setOnClickListener()中的send參數是匿名類。
問題1:在第二種情況下,匿名類是否擁有MyClass的引用?
問題2:在這兩種情況下,存儲器上的指紋是什么?
問題3:哪種方法最適合使用,以提高性能或保留較少的內存?
內部類實例可以訪問容器實例的內存。 在名稱沖突的情況下,由於MyClass.this
,您可以通過其實例名稱強制使用容器實例。
答案1:可以
答案2:創建2個班級〜相同的指紋。 在第一種情況下,偵聽器類可以在其他地方重用。
答案3:內部類可以訪問容器實例的屬性和方法→非常有用,但是當偵聽器類可以在多種用法之間共享時,它使用的類就更少了。 最好的方法是分解更多代碼的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.