2010-08-30 29 views

Trả lời

29

Bạn có thể nhận được EnumSet bất biến với bộ sưu tập của Google (Guava).


Resources:

+2

Ổi đang trở thành một thư viện tuyệt vời. Những hòn đá này! +1 –

+2

Đã chấp nhận nó nếu 'Sets.immutableEnumSet' sẽ trả về một lớp' ImmutableEnumSet' công khai, không chỉ 'ImmutableSet'. Mặc dù tôi sẽ cố gắng yêu cầu làm như vậy. –

+4

Lợi ích gì bạn thấy loại ImmutableEnumSet công cộng này có, tôi tự hỏi? –

11

Có gì sai với Collections.unmodifiableSet() gói EnumSet?

Đúng, bản gốc EnumSet vẫn có thể thay đổi, nhưng miễn là bạn hủy tham chiếu ban đầu, nó tốt như không thay đổi bên trong trình bao bọc.

chỉnh sửa: OK, vì EnumSet không cung cấp bất kỳ phương pháp dụ trên và phía trên giao diện Set, lý do duy nhất vì đã không sử dụng giải pháp này là các loại EnumSet rất hữu ích cho các mục đích tài liệu, và bạn mất rằng khi gói nó trong một Set. Ngoài ra, hành vi EnumSet sẽ được giữ nguyên.

+4

Nó không có tất cả các phương pháp của một 'EnumSet' –

+0

@Colin gì phương pháp sẽ là được? Bạn vẫn có thể sử dụng các phương thức tĩnh để tạo enumset trước khi gói nó, và tôi không thấy bất kỳ phương thức thể hiện mới nào trong enumset mà các bộ khác không có. –

+0

@skaffman. Tôi nghĩ rằng tôi muốn nó chủ yếu cho mục đích tài liệu. Điều về EnumSet là nó chỉ định một thứ tự lặp nhất định, và nếu bạn sử dụng 'Set' thay cho' EnumSet', nó có thể tạo ra các kết quả khác nhau hơn bạn mong đợi: ai đó nhìn thấy 'Set' trong chữ ký phương thức và chuyển vào' HashSet' ví dụ. Nếu không có yêu cầu này, đề xuất của bạn sẽ ổn. BTW, 'EnumSet' không có phương thức bổ sung (chỉ là các hàm tạo), mặc dù nó sẽ thực sự tốt khi có' first', 'last' và' reverseIterator' trong một số trường hợp. –

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