【发布时间】:2016-10-26 22:34:23
【问题描述】:
假设我有一个项目集合,例如 List<Item>,我需要检查是否有任何项目是从包装类修改的,例如,任何项目属性的值通过二传手:
List<Item> items = itemsWrapper.getItems(); // itemsWrapper contains a list of items
Item anItem = items.get(index);
item.setProperty(property);
itemsWrapper.hasChanged(); // ??????
我正在尝试找出实现最后一条语句的方法,或类似的方法。
我可以看到有类似的问题,例如 this one 建议使用 Hibernate 但答案非常模糊,而且我的问题与数据库无关。它还提到了建立一个听众名单,但我不确定他怎么做。
或this other question,其中选择的答案建议使用dirty 标志,每次修改属性时都需要升起该标志。然而,自相矛盾的是,我的类实际上会变得dirtier,而且我需要修改许多修改项目属性的方法。
是否有其他方法,最好是透明的?
【问题讨论】:
-
“观察者”模式:itemsWrapper 观察项目的变化。
-
你能给我们更多的背景信息吗?我怀疑您可能希望监视其他地方的更改,而不是集合本身。
-
@Fildor 我还检查了观察者模式方法,但我看不出它与
dirty标志方法在实际“使我的代码更脏”方面有何不同,因为我仍然会有更新我所有的设置器(和对象修改方法)。 -
@TimBiegeleisen 真的没什么。实际情况实际上不是
List<Item>,而是对我的项目更具体的东西,但我追求的想法是一样的。我需要知道集合中的任何项目是否更改(不是添加、删除或替换它们,而是实际对象是否更改)。 -
是的,您必须更改您的代码。几乎没有办法绕过它。否则,您必须将所有项目的某个状态与实际状态进行比较。当然,这本身就是大量更改的代码...
标签: java