面向Java开发人员的Scala指南 - 关于特征和行为 - 编程入门网
ener,可以使用如清单 5 所示的方式来完成此任务:
清单 5. Scala 的 Person POJO 与监听器
面向Java开发人员的Scala指南 - 关于特征和行为(5)时间:2011-01-30 IBM Ted Neward注意,如何使用清单 5 中的 object 实现将静态方法注册为监听器 — 而在 Java 代码中,除非显式创建并实例化 Singleton 类,否则永远无法实现。这进一步证明了一个理论:Scala 从 Java 开发的历史 痛苦 中吸取了教训。 Person 的下一步是提供 addPropertyChangeListener() 方法,并在属性更改时对各监听器触发 propertyChange() 方法调用。在 Scala 中,以可重用的方式完成此任务与定义和使用特征一样简单,如清单 6 所示。我将此特征称为 BoundPropertyBean,因为在 JavaBeans 规范中,“已通知” 的属性称为绑定属性。 清单 6. 神圣的行为重用!
同样,我依然要使用 java.beans 包的 PropertyChangeSupport 类,不仅因为它提供了约 60% 的实现细节,还因为我所具备的行为与直接使用它的 JavaBean/POJO 相同。对 “Support” 类的其他任何增强都将传播到我的特征。不同之处在于 Person POJO 不需要再直接使用 PropertyChangeSupport,如清单 7 所示: 清单 7. Scala 的 Person POJO,第 2 种形式
在编译后,简单查看 Person 定义即可发现它有公共方法 addPropertyChangeListener()、removePropertyChangeListener() 和 firePropertyChange(),就像 Java 版本的 Person 一样。实际上,Scala 的 Person 版本仅通过一行附加的代码即获得了这些新方法:类声明中的 with 子句将 Person 类标记为继承 BoundPropertyBean 特征。 遗憾的是,我还没有完全实现;Person 类现在支持接收、移除和通知监听器,但 Scala 为 firstName 成员生成的默认方法并没有利用它们。同样遗憾的是,这样编写的 Scala 没有很好的注释以自动地 生成利用 PropertyChangeSupport 实例的 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |