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

标签 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 设置为“今天”。

我更喜欢一个不是特定于 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/

相关文章:

java - LGPL Xuggle : ConverterFactory. createConverter 不支持

java - 如何使用Gson提取字段

java - AXIS2 如何设置连接重试?

java - 在 Java 中用零填充列表

java - 将 JPanel 的区域转换为 BufferedImage

java - Kony FFI 整合问题

java - 如何在android中另一个名为 "Activity A"的 Activity 中使用 "Activity B"的switch case中定义的方法?

java - 我是否也应该在 spring 中为子方法添加 @Transactional 注释?

java - springboot项目部署gradle : Execution failed for task ':deploytest'

Java:在以下情况下如何从保存文件加载?