快速业务通道

面向Java开发人员的Scala指南 - 关于特征和行为 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-20
JO 本身使用必要的公共方法,各公共方法都调用 Support 类来完成艰难的工作。更新后的 Person POJO 可以使用 PropertyChangeSupport,如下所示:

面向Java开发人员的Scala指南 - 关于特征和行为(3)

时间:2011-01-30 IBM Ted Neward

清单 3. Person POJO,第 3 种形式

//This is Java import java.beans.*; public class Person {    private String lastName;    private String firstName;    private int age;    private PropertyChangeSupport propChgSupport =      new PropertyChangeSupport(this);    public Person(String fn, String ln, int a)    {      lastName = ln; firstName = fn; age = a;    }    public String getFirstName() { return firstName; }    public void setFirstName(String newValue)    {      String old = firstName;      firstName = newValue;      propChgSupport.firePropertyChange("firstName", old, newValue);    }    public String getLastName() { return lastName; }    public void setLastName(String newValue)    {      String old = lastName;      lastName = newValue;      propChgSupport.firePropertyChange("lastName", old, newValue);    }    public int getAge() { return age; }    public void setAge(int newValue)    {      int old = age;      age = newValue;      propChgSupport.firePropertyChange("age", old, newValue);    }    public void addPropertyChangeListener(PropertyChangeListener pcl)    {      propChgSupport.addPropertyChangeListener(pcl);    }    public void removePropertyChangeListener(PropertyChangeListener pcl)    {      propChgSupport.removePropertyChangeListener(pcl);    } }

不知道您有何感想,但这段代码的复杂得让我想去重拾汇编语言。最糟糕的是,您要对所编写的每一个 POJO 重复这样的代码序列。清单 3 中的半数工作都是在 POJO 本身中完成的,因此无法被重用 — 除非是通过传统的 “复制粘贴” 编程方法。

现在,让我们来看看 Scala 提供什么样内容来实现更好的变通方法。

面向Java开发人员的Scala指南 - 关于特征和行为(4)

时间:2011-01-30 IBM Ted Neward

Scala 中的特征和行为重用

所有人都有义务考虑自己的性格特征。必须合理控制这些特征,而不去质疑他人的性格特征是否更适合自己。

—西塞罗

Scala 使您能够定义处于接口和类之间的新型结构,称为特征(trait)。特征很奇特,因为一个类可以按照需要整合许多特征,这与接口相似,但它们还可包含行为,这又与类相似。同样,与类和接口类似,特征可以引入新方法。但与类和接口不同之处在于,在特征作为类的一部分整合之前,不会检查行为的定义。或者换句话说,您可以定义出这样的方法,在整合到使用特征的类定义之前,不会检查其正确性。

特征听起来十分复杂,但一个实例就可以非常轻松地理解它们。首先,下面是在 Scala 中重定义的 Person POJO:

清单 4. Scala 的 Person POJO

//This is Scala class Person(var firstName:String, var lastName:String, var age:Int) { }

您还可以确认 Scala POJO 具备基于 Java POJO 的环境中需要的 get()/set() 方法,只需在类参数 firstName、lastName 和 age 上使用 scala.reflect.BeanProperty 注释即可。现在,为简单起见,我们暂时不考虑这些方法。

如果 Person 类需要能够接收 PropertyChangeList

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号