2015-01-06 14 views
5
đang

Rất đơn giản:Tại sao SortedList.add() ném UnsupportedOperationException?

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); 
    } 
} 

Thực hiện:

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) 

Trả lời

11

Một SortedList là một cái nhìn được sắp xếp trong danh sách cơ bản của nó. Nếu bạn được phép thêm các phần tử vào danh sách được sắp xếp, nó sẽ phá vỡ mối quan hệ đó. Bạn cần phải thêm phần tử vào danh sách cơ bản thay thế:

il.add(12); 
+0

Tôi phải đưa danh sách được sắp xếp vào TableView và giữ danh sách cơ bản trong mô hình của tôi. Các thao tác trên mô hình được thực hiện trên danh sách cơ bản khi sắp xếp các khung nhìn. Làm thế nào tôi có thể thể hiện một ràng buộc có trật tự trong mô hình? – Aubin

+0

Tôi không hoàn toàn chắc chắn tôi hiểu, nhưng nó sẽ làm việc để lưu trữ một 'ObjectProperty >' trong mô hình (nơi 'T' là kiểu dữ liệu cho bảng), và (hai chiều?) Liên kết nó với thuộc tính so sánh của 'SortedList'? –

+0

Điều này phải là một trong những lớp "tiện ích" ngu ngốc nhất mà họ đã đưa vào trong JavaFX .. nếu nó không thành công trong trường hợp sử dụng đơn giản này. Tôi lấy một cái gì đó giống như một hộp kết hợp, đặt các mục vào một SortedList để thuận tiện, và sau đó, tất cả các cuộc gọi đến comboBox.getItems.add (...) sẽ thất bại? Facepalm đến một mức sử thi .... Tại sao trên trái đất họ không vượt qua các cuộc gọi thêm xuống danh sách gói? – user2163960

Các vấn đề liên quan