当我致电TableColumn#getCellObservableValue()
时,它会每次返回一个新的ObservableValue
还是一个持久的,设置一个?
我问的原因是我正在尝试为Listener
中的每个单元格的每个ObservableValue
添加TableView<T>
。我在ObservableValue<R>
内的给定TableColumn<T,R>
内维护每个HashMap<CellIdentity<R>,Listener>
。
CellIdentity<R>
尝试使用ObservableValue<R>
的标识来查找Listener
。这样,如果我使用ListChangeListener
来检测何时删除记录,我可以取消订阅单元格值侦听器并防止泄漏。
private static final class CellIdentity<R> {
private final ObservableValue<R> cellValue;
CellIdentity(ObservableValue<R> cellValue) {
this.cellValue = cellValue;
}
@Override
public boolean equals(Object other) {
return this.cellValue == ((CellIdentity<?>)other).cellValue;
}
@Override
public int hashCode() {
return System.identityHashCode(cellValue);
}
}
问题是当我把这个TableColumn#getCellObservableValue()
包裹在CellIdentity<R>
里面,把它和Listener
放在HashMap
中时,当我这样做时,我会得到空值get()稍后用同样的方法把它放在()它。我无法检索听众。
如何在Listenr
中为每个单元格值添加TableColumn
,以后能够检索它以将其删除?