面向Java开发人员的Scala指南 - 关于特征和行为 - 编程入门网
private int age;
public Person(String fn, String ln, int a)
{
lastName = ln; firstName = fn; age = a;
}
public String getFirstName() { return firstName; }
public void setFirstName(String v) { firstName = v; }
public String getLastName() { return lastName; }
public void setLastName(String v) { lastName = v; }
public int getAge() { return age; }
public void setAge(int v) { age = v; }
}
面向Java开发人员的Scala指南 - 关于特征和行为(2)时间:2011-01-30 IBM Ted Neward这些代码看起来非常简单,编写起来也不难。但如果您希望提供通知支持 — 使第三方能够使用 POJO 注册并在变更属性时接收回调,事情会怎样?根据 JavaBeans 规范,必须实现 PropertyChangeListener 接口以及它的一个方法 propertyChange()。如果您希望允许任何 POJO 的 PropertyChangeListener 都能够对属性更改 “投票”,那么 POJO 就需要实现 VetoableChangeListener 接口,该接口的实现又依赖于 vetoableChange() 方法的实现。 至少,事情应该是这样运作的。 实际上,希望成为属性变更通知接收者的用户必须实现 PropertyChangeListener 接口,发送者(本例中的 Person 类)必须提供接收该接口实例的公共方法和******需要监听的属性名称。最终得到更加复杂的 Person,如清单 2 所示: 清单 2. Person POJO,第 2 种形式
保持引用属性变更******意味着 Person POJO 必须保留某种类型的集合类(例如 ArrayList)来包含所有引用。然后必须实例化、插入并移除 POJO — 由于这些操作不是原子操作,因此还必须包含恰当的同步保护。 最后,如果某个属性发生变化,属性******列表必须得到通知,通常通过遍历 PropertyChangeListener 的集合并对各元素调用 propertyChange() 来实现。此过程包括传入新的 PropertyChangeEvent 描述属性、原有值和新值,这是 PropertyChangeEvent 类和 JavaBeans 规范的要求。 在我们编写的 POJO 中,只有少数支持******通知,这并不意外。在这里要完成大量工作,必须手动地重复处理所创建的每一个 JavaBean/POJO。 除了工作还是工作 — 变通方法在哪里? 有趣的是,C++ 对于私有继承的支持在 Java 语言中得到了延续,今天,我们用它来解决 JavaBeans 规范的难题。一个基类为 POJO 提供了基本 add() 和 remove() 方法、集合类以及 “firePropertyChanged()” 方法,用于通知******属性变更。 我们仍然可以通过 Java 类完成,但由于 Java 缺乏私有继承,Person 类必须继承 Bean 基类,从而可向上转换 到 Bean。这妨碍了 Person 继承其他类。多重继承可能使我们不必处理后续的问题,但它也重新将我们引向了虚拟继承,而这是绝对要避免的。 针对这个问题的 Java 语言解决方案是运用众所周知的支持 类,在本例中是 PropertyChangeSupport:实例化 POJO 中的一个类,为 PO |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |