当前位置: 备案域名出售 > 建站教程>正文

Closure与回调

Closure是一种能调用的对象,它记录了创建它的那个作用信息。读过这段定义你就能看出,内部类就是一种面向对象的closure,因为它不仅保存了宿主类的所有信息(创建它作用域),而且还自动保存指向那个宿主类对象的reference,更何况它还有权操控这个对象的所有成员,即使它们是private的。

在要求Java提供指针机制的众多议论中,最具有吸引力一条就是,要让它呢能进行回调。有了回调,你就能给别的对象一段信息,然后在未来某个时点,让它反过来调用发起方对象了。但是,如果是用指针来实现回调,那你就只能指望程序员了,希望它们不要误用指针。正如你所看到的,Java在这个问题上更为谨慎,因此它没有指针,内部类所提供的closure是一个完美的解决方案——它比指针更灵活,也更安全。

我们还要了解“让宿主类去实现接口”和“交给内部类去做”之间的区别。从编程的角度来说,很明显,前者会更简单一些。后者不能靠实现接口来覆写方法了,这就逼着你只能使用内部类来提供一个独立的实现了。此外还有一点值得注意,创建内部类的时候,别去扩展或者修改宿主类的接口。回调的价值在于其灵活性:你可以在程序运行的时候动态地选择应该调用哪个方法。为实现GUI功能,回调到处都是。

« 上一篇下一篇 »