为什么SortedList.add()会抛出UnsupportedOperationException异常?

5
非常简单的代码:
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.collections.transformation.SortedList;

public final class SortedListTest {

   public static void main( String[] args ) {
      final ObservableList<Integer> il  = FXCollections.observableArrayList();
      final SortedList<Integer>     sil = new SortedList<>( il );
      sil.comparatorProperty().set((l,r)-> l-r );
      sil.add( 12 );
   }
}

执行:

Exception in thread "main" java.lang.UnsupportedOperationException
    at java.util.AbstractList.add(AbstractList.java:148)
    at java.util.AbstractList.add(AbstractList.java:108)
    at SortedListTest.main(SortedListTest.java:13)
1个回答

11

SortedList是其基础列表的排序视图。如果允许向已排序列表中添加元素,将会破坏该关系。您需要将元素添加到基础列表中:

il.add(12);

我必须将排序后的列表提供给TableView,并保留模型中的基础列表。当视图被排序时,对模型的操作是在基础列表上完成的。我该如何在模型中表达有序约束? - Aubin
我不是完全确定我理解了,但是将一个 ObjectProperty<Comparator<? super T>> 存储在模型中(其中 T 是表格的数据类型),并将其与 SortedList 的比较器属性进行(双向?)绑定,这样行得通吗? - James_D
@user2163960 不太确定你的评论的意义所在:你知道这里没有人写Java,对吧?无论如何,你的建议并不是很有意义,只要花几分钟思考就能明白。 - James_D

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接