【发布时间】:2016-01-12 02:03:30
【问题描述】:
我有一个私人列表,我不希望它可以从外部修改。只允许从外部添加,并且仅当对象有效时。所以我以前是这样写的:
private List<Object> list = new ArrayList<>();
public List<Object> getList()
{
return Collections.unmodifiableList(list);
}
public void addObject(Object object)
{
if (isObjectValid(object)) //any validation
list.add(object);
}
现在出于 JavaFX 的目的,我将列表转换为属性:
private ListProperty<Object> list =
new SimpleListProperty<>(FXCollections.observableArrayList());
为了从数据绑定和ListChangeListener 等属性的好处中获利,我必须将属性提供给外部世界。但是随后也提供了对列表的所有方法的访问。 (使用 ReadOnlyListProperty 没有任何效果,因为列表实例本身永远不会改变。)我可以做些什么来实现所有目标:
- 私有列表属性
- 可以从外部添加ListChangeListener
- 可用于从外部绑定依赖项(create 方法形成类 Bindings)
- 不修改属性或列表实例本身
- 仅通过我自己的方法从外部修改列表内容
【问题讨论】:
标签: data-binding javafx unmodifiable listproperty