在 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 设置为“今天”。
我更喜欢一个不是特定于 JDO 的解决方案,并且绝对不希望数据存储中有这种逻辑(RDBMS 中的自动时间戳列等)。
我可以放
this.lastUpdated = new Date();
在每个 setter 中,或在每个 setter 中触发一个自定义事件,但这很丑陋且容易出错。
有没有更优雅的解决方案?
最佳答案
您可以实现 PropertyChangeListener
接口(interface)并在客户端注册您的兴趣。自 1.0 以来,它一直是 Java Bean 规范的一部分。
它们不仅仅与 UI 元素有关。它们被认为是为 IDE(例如 Bean Factory)匹配类似 VB 的功能的一种方式。
http://docs.oracle.com/javase/tutorial/uiswing/events/propertychangelistener.html
关于Java - 当对象的任何属性发生变化时触发事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9815182/