Tôi đã bỏ phiếu lên câu trả lời của Brian, nhưng muốn thêm một chút cấp cao nghĩ ..
Nếu bạn xem qua SDK, bạn sẽ thấy rằng hiếm khi (nếu có) vượt qua các đối tượng thu thập thực tế.
Lý do cho điều đó là không phải là một ý tưởng hay. Bộ sưu tập cực kỳ không được bảo vệ.
Hầu hết thời gian bạn muốn tạo một bản sao trước khi chuyển nó đi và chuyển bản sao để mọi sửa đổi đối với bộ sưu tập sẽ không thay đổi môi trường cho một thứ khác dựa vào nó.Ngoài ra, luồng trở thành một cơn ác mộng - ngay cả với một bộ sưu tập đồng bộ!
Tôi đã nhìn thấy hai giải pháp, một là luôn trích xuất một mảng và chuyển nó. Đây là cách SDK thực hiện.
Cách khác là LUÔN LUÔN bọc các bộ sưu tập trong một lớp cha mẹ (Và tôi có nghĩa là đóng gói, không mở rộng). Tôi đã nhận được vào thói quen này và nó rất đáng giá trong khi. Nó không thực sự chi phí bất cứ điều gì bởi vì bạn không sao chép tất cả các phương pháp thu thập anyway (thực sự bạn hiếm khi trùng lặp bất kỳ của họ). Trong thực tế những gì bạn kết thúc làm là di chuyển "Tiện ích" chức năng từ các lớp khác được phân phối trên tất cả các mã của bạn vào lớp wrapper, đó là nơi mà nó nên có được ở nơi đầu tiên.
Bất kỳ phương pháp nào có chữ ký khớp với "phương pháp (bộ sưu tập, ...)" gần như chắc chắn sẽ là một phương pháp thành viên của bộ sưu tập đó, vì bất kỳ vòng lặp nào lặp lại trên bộ sưu tập.
Tôi chỉ phải vứt bỏ mọi thứ bây giờ và sau đó bởi vì đó là một trong những điều tôi không nhận được trong một thời gian (vì không ai vô địch khái niệm này). Nó luôn luôn có vẻ như nó sẽ có một số nhược điểm nhưng đã làm điều này trong một thời gian và nhìn thấy những vấn đề nó giải quyết và mã nó loại bỏ, tôi thậm chí không thể tưởng tượng bất kỳ hạn chế có thể bản thân mình, nó chỉ là tất cả tốt.
Nguồn
2009-07-13 20:44:07
Ngay cả khi 'Bản đồ' thực hiện' Serializable', nó không nhất thiết có nghĩa là nó có thể nối tiếp được. Nhưng có khả năng tuần tự hóa Java là một vấn đề thời gian chạy trong Java. –
Thật không may cho Java, đây là câu trả lời đúng và xứng đáng để được ở trên cùng. – hythlodayr
Bạn đã bỏ lỡ phần quan trọng của câu trả lời của tôi ... Bạn chấp nhận Bản đồ và THEN kiểm tra xem đối tượng có phải là một thể hiện của Serializable hay không. Tất nhiên bạn có thể làm điều đó theo cách khác nhưng sau đó bạn sẽ nhận được một giao diện không thực sự cho người dùng biết bạn muốn loại bộ sưu tập nào. – Fredrik