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:一个内部类可以访问容器实例的属性和方法→非常有用,但是当可以在多个用法之间共享一个侦听器类时,它使用的类就更少了。最好的方法是分解更多代码的方法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句