[Groovy] 关于Groovy的listeners
CDE
2008-01-18
在官方文档给出了一个例子:
Though Groovy doesn't support anonymous inner classes, it is possible to define action listeners inline through the means of closures. So instead of writing in Java: Processor deviceProc = ... deviceProc.addControllerListener(new ControllerListener() { public void controllerUpdate(ControllerEvent ce) { ... } } You can do that in Groovy with a closure: // Add a closure for a particular method on the listener interface deviceProc.controllerUpdate = { ce -> println "I was just called with event $ce" } 很明显, 很好用, 但是却不知道controllerUpdate 是哪里跑出来的? deviceProc本身不具备这个吧? 请达人帮忙解析一下语法规则, 实际它是怎么工作的. 卡在这里了 |
|
agile_boy
2008-01-18
其本质就是用Cloure来实现Interface而已,详细参考Groovy way to implement interfaces
注意这句话:This technique means that Groovy's listener closures are used like a ListenerAdapter where only one method of interest is overridden. |
|
CDE
2008-01-18
还是不太明白...
controllerUpdate实现的是ControllerListener这个接口. 然后通过addControllerListener, 把这个listener添加到deviceProc. deviceProc里面肯定有一个相关的容器来维护这些listener, 比如添加, 移除一个listener 但是Groovy的实现是直接在deviceProc里面添加一个controllerUpdate的闭包? 然后我如果需要继续添加另一个listener怎么样呢? 经过试验可以得知 deviceProc.controllerUpdate = { ce -> println "second" } 添加另一个, 语法是完全一样的...为什么是添加而不是覆盖呢? 这个语法让人非常疑惑! 还有这些闭包都是放在哪里的呢? 是谁在完成保存这些闭包的责任? Groovy在JVM中担任了什么责任, 以完成这些转换? 然后我该怎么移除一个listener呢? |
|
agile_boy
2008-01-31
|