正如我所看到的,我们必须覆盖equals
和hashCode
方法,以便从java Collection的java.util.List
或类似的其他人中删除自定义类的对象。
但我想知道TableView
和ListView
' remove
是如何运作的?最近,我成功删除了(Person)
TableView
中的自定义类ObservableList
对象(查看ObservableList
后{{ {1}}方法我意识到它是从remove
继承remove(Object)
方法
然后如何通过调用删除TableView的行。 java.util.List
行包含Person类的对象数据,Person类没有包含table.getItems().remove(row.getItem())
和equals(object);
方法
以下是关于这种混淆的完整代码。
hashCode();
答案 0 :(得分:2)
默认比较仅使用对象标识;即如果您未覆盖equals(...)
,则object.equals(anotherObject)
相当于object == anotherObject
。
在这种情况下,如果引用list.remove(object)
与列表所持的引用完全相同,row
将从list
中删除object
。
在这种情况下:
table.getItems().remove(row.getItem())
显然会奏效。 row.getItem()
返回表行显示的项,这是在表视图的数据备份列表中保存的完全相同的对象。 (表视图机制将表视图的支持列表中的引用传递给表行的updateItem(...)
方法。)
如果要为要删除的对象提供remove(...)
的{{1}}参数,则只需要担心覆盖equals,但可能不是对实际相同对象的引用在记忆中。