在Java中,当对象的任何属性发生变化时,对象触发事件的最优雅方式是什么?
我的域模型有几个对象,如
class MyClass {
String id;
String name;
Collection<MyThing> mythings= new HashSet<MyThing>();
// more fields...
Date lastUpdated;
//constructor, getters and setters, etc
}
每当任何属性(id / name / mythings)发生变化时,我都需要将lastUpdated设置为“today”。
我更喜欢不是特定于JDO的解决方案,并且绝对不希望在数据存储区中使用此逻辑(RDBMS中的自动时间戳列等)。
我可以把
this.lastUpdated = new Date();
在每个setter中,或在每个setter中触发一个自定义事件,但这很丑陋且容易出错。
有更优雅的解决方案吗?
答案 0 :(得分:1)
您可以实施PropertyChangeListener
界面并注册您对客户的兴趣。自1.0以来,它一直是Java Bean规范的一部分。
它们并非都是关于UI元素的。它们被设想为一种匹配IDE的类似VB的功能(例如Bean Factory)。
http://docs.oracle.com/javase/tutorial/uiswing/events/propertychangelistener.html
http://weblogs.java.net/blog/joshy/archive/2006/02/all_hail_the_pr.html