2009-07-21 34 views
9

Tôi chỉ muốn biết những gì java.util.Collections.checkedList() thực sự được sử dụng.Cuộc gọi Collections.checkedList() trong java là gì?

Tôi có một số mã mà tôi biết đang trả lại cho tôi List<String> nhưng nó đang được chuyển qua một chuỗi các cuộc gọi nhắn tin và trả lại cho tôi dưới dạng java.io.Serializable. Danh sách đã chọn đó có tốt cho tôi để biến số Serializable của tôi thành một số List<String> không? Tôi biết tôi có thể truyền nó đến một số java.util.List, nhưng tôi không muốn kiểm tra từng phần tử và tôi không cảm thấy thoải mái với giả sử mỗi phần tử là String.

Trả lời

16

Nó được sử dụng một phần như một công cụ gỡ lỗi để tìm mã chèn một loại sai, trong trường hợp bạn thấy điều đó xảy ra, nhưng không thể tìm ra vị trí.

Bạn có thể sử dụng nó như một phần của API công khai cung cấp một bộ sưu tập và bạn muốn đảm bảo bộ sưu tập không nhận được bất kỳ thứ gì trong loại sai (ví dụ như khách hàng xóa hình đại diện).

Cách bạn có thể sử dụng nó trong trường hợp của bạn là:

Collections.checkedList(
     new ArrayList<String>(uncertainList.size()), String.class) 
     .addAll(uncertainList); 

Nếu điều đó không ném một ngoại lệ, sau đó bạn biết bạn là tốt. Đó không phải là một đoạn mã được tối ưu hóa hiệu suất, nhưng nếu nội dung danh sách có kích thước nhỏ, nó sẽ ổn thôi.

+0

đẹp workaround! –

14

Không khá:

Collections.checkedList sẽ chỉ trang trí danh sách để ngăn chặn bất kỳ chèn tương lai với các đối tượng của lớp sai, nó sẽ không kiểm tra tất cả các yếu tố đó đã có trong danh sách.

Tuy nhiên, bạn có thể tạo danh sách kiểm tra mới và sau đó gọi addAll và chuyển vào danh sách bạn không chắc chắn - thay vì tự viết vòng lặp.

9

Thảo luận về những gì checkedList có thể được sử dụng cho sẵn có trong tài liệu cho checkedCollection. Các lý do đưa ra là:

  • như một viện trợ gỡ lỗi (nếu ai đó đã sử dụng một dàn diễn viên không được kiểm soát)
  • để đảm bảo an toàn khi đi qua một bộ sưu tập trở nên thông dụng bởi mã của bên thứ ba.

Bạn có thể sử dụng sau đây từ google collections để kiểm tra xem danh sách không chỉ chứa các chuỗi:

Iterables.all(list, Predicates.instanceOf(String.class)) 
+0

Cảm ơn. Tôi bỏ lỡ điều đó. Các IDE đang làm hỏng việc đọc javadoc của tôi. –

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