【发布时间】:2009-10-22 08:29:40
【问题描述】:
我会尽可能清楚地解释我的问题:)。我正在使用 PropertyChangeSupport 通知已注册视图的属性更改。其中一个属性是一个对象,该对象的属性在每个视图秒内都会更改。我不想在每次更新时为这个特定对象创建新实例(让 propertychangelistener 注意到变化),所以我编写了自己的 equals 方法,我省略了与自身的比较。
@Override
public boolean equals(Object item) {
// do not compare
// if (this == item) { return true; }
if (!(item instanceof TransferQueueItem) ||
item == null) {
return false;
}
TransferQueueItem newItem = (TransferQueueItem) item;
boolean value =
// ommited... properties comparation
return value;
}
很遗憾,这并没有达到我想要的效果。如果我创建对象的副本并在其上触发属性更改方法,那么它可以正常工作。
我在这里错过了什么?
-- 编辑
我意识到,因为我使用的是同一个实例而不是它的副本,所以属性指向同一个地方,因此比较总是会成立。是否有解决方法(除了创建副本)。或者每秒创建一个对象的副本有多糟糕,例如。
【问题讨论】:
-
这无关紧要,因为对同一实例的任何更改都应该向该实例的所有侦听器触发事件。您在这里省略了一些重要信息。
标签: java equals javabeans propertychangesupport