gpt4 book ai didi

java - 使用 VetoableChangeListener 停止循环通知

转载 作者:太空宇宙 更新时间:2023-11-04 09:01:45 26 4
gpt4 key购买 nike

我对 VetoableChangeListener 的设计有疑问。我实现了 VetoableChangeListener 接口(interface)来监听模型类中属性的更改,因此当模型触发时

vetoableChange(PropertyChangeEvent evt) throws PropertyVetoException

…我尝试将更改保存在数据库中,这可能会失败(例如,由于 SQLException)。如果失败,我会抛出一个 PropertyVetoException 来恢复模型中的更改。

该模型在 VetoableChangeSupport (JDK 类)中进行委托(delegate),当它收到 PropertyVetoException 时,它会捕获它并通知恢复到所有 VetoableChangeListener,同时 oldValue/newValue 互换(稍后重新抛出异常),以便该事件再次到达我的类,我尝试保存在再次数据库,等等...

我有一个解决方法,即模型不会更改,直到没有人抛出 PropertyVetoException,因此在 VetoableChangeListener 中,我首先检查要保存在数据库中的数据是否不等于模型中的数据,如果相等,我会忽略更改。

还有其他更好的解决方法吗?

最佳答案

您的“解决方法”并不是真正的解决方法,但实际上对我来说听起来像是正确的解决方案:在尝试“更改”持久版本之前确认对象的当前状态实际上已发生更改。这也会更加高效(数据库访问的成本很高)。

关于java - 使用 VetoableChangeListener 停止循环通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/120082/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com