Javafx 是否可以创建只读可观察列表?

Javafx 是否可以创建只读可观察列表?,javafx,observablelist,Javafx,Observablelist,我有可观察列表ObservableList=FXCollections.observableArrayList() 在list的getter方法中,我想返回只读可观察列表,类似于: public ObservableList<Integer> getReadOnlyList() { return readOnlyObservableList(list); } 所以基本上我想返回与原始列表同步的ObservableList列表,这样用户可以注册ListChangeListe

我有可观察列表
ObservableList=FXCollections.observableArrayList()

list
的getter方法中,我想返回只读可观察列表,类似于:

public ObservableList<Integer> getReadOnlyList() {
     return readOnlyObservableList(list);
}

所以基本上我想返回与原始列表同步的ObservableList列表,这样用户可以注册
ListChangeListener
并观察更改事件,但同时防止用户更改原始列表。

我认为最好的方法是使用方法:

public observebleList getReadOnlyList(){
返回FXCollections.unmodifiableObservableList(列表);
}
另请参见

ObservableList=FXCollections.observableArrayList();
ObservableList roList=FXCollections.unmodifiableObservableList(列表);
公共可观察列表getReadOnlyList(){
返回角色扮演者;
}

尽管此代码通常是正常的,但它会导致一些微妙的问题,因为列表上的侦听器很弱,垃圾收集器将收集这些侦听器,因此无法通知您对原始列表的更改
getReadOnlyList().addListener(listChangeListener);
public ObservableList<Integer> getReadOnlyList() {
    return FXCollections.unmodifiableObservableList(list);
}
ObservableList<Integer> list = FXCollections.observableArrayList();
ObservableList<Integer> roList = FXCollections.unmodifiableObservableList(list);

public ObservableList<Integer> getReadOnlyList() {
  return roList;
}