我有一个私人列表,我不希望它可以从外部修改。只允许对象有效,只允许从外部添加。因此我曾经这样写过:
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没有任何效果,因为列表实例本身永远不会改变。)我可以做些什么来实现所有目标:
答案 0 :(得分:1)
未经测试,但请尝试:
private ListProperty<Object> list = new SimpleListProperty<>(FXCollections.observableArrayList());
private ReadOnlyListWrapper<Object> publicList = new ReadOnlyListWrapper<>();
并在构造函数中:
publicList.bind(Bindings.createObjectBinding(
() -> FXCollections.unmodifiableObservableList(list.getValue()),
list));
然后你的访问者方法是
public ReadOnlyListProperty<Object> getList() {
return publicList.getReadOnlyProperty();
}