2011-02-10 49 views
3

作为关于Scala的@BeanProperty生成更改事件的this question的后续操作:完全实现使用某个自定义注释(例如,@Property)注释var字段将会生成的行为需要引发属性更改事件的代码?唯一的方法就是编写一个编译器插件,对吧?关于Scala字段和属性更改事件

更一般地说:有没有一种标准的方式(如Java)来处理Scala编译器中的注释?

回答

2

使用代理可以做到这一点,就像在Java中一样,可能涉及到cglib或类似的代码。一个编译器插件也可以做到这一点(正如你说的那样),但如果你写的东西比通用库更少,可能会有点矫枉过正!

更好的解决方案是手工编写getter和setter方法,以便它们发出这些事件,如果您担心保持代码清洁,那么这些方法总是可以移入特性中。


对于一个稍微不同的方式处理问题,Naftoli Gugenhem有"reactive" library on GitHub帮助功能反应式编程,可以说比可观察性的事件驱动模型更好的范例。

ObservableBuffer class是一个开始寻找的好地方。

+0

谢谢,不错的链接!似乎还有一个内置的`ObservableBuffer` mixin特征:http://www.scala-lang.org/api/current/scala/collection/mutable/ObservableBuffer.html – 2011-02-11 17:03:49