Java - 当对象的任何属性发生更改时触发事件

时间:2012-03-22 01:17:08

标签: java

在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中触发一个自定义事件,但这很丑陋且容易出错。

有更优雅的解决方案吗?

1 个答案:

答案 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