我会尽量清楚地解释我的问题:)。我正在使用 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;
}
不幸的是,这并没有达到我想要的效果。如果我创建对象的副本并在其上触发属性更改方法,那么它可以正常工作。
我在这里想念什么?
- 编辑
我意识到,因为我使用的是同一个实例而不是它的副本,所以属性指向同一个地方,因此比较总是正确的。是否有解决方法(除了创建副本)。或者每秒创建一个对象的副本有多糟糕,例如。