2010-08-11 31 views
11

Trình tạo lớp EnumMap cần lớp làm đối số. Hầu hết các lần K.class được chuyển làm đối số. Tôi vẫn không nhận được lý do cho việc chấp nhận này như là đối số thay vì suy luận từ K.Tại sao hàm tạo EnumMap cần đối số lớp?

Cảm ơn
là gì - pkc

Trả lời

2

Các Map do đó biết tất cả các phím có thể. Nó được gọi là (nội bộ) là keyUniverse. Các ý kiến ​​nói:

Tất cả các giá trị bao gồm K. (Cached cho hiệu suất)

5

sự triển khai của EnumMap nhu cầu metainformation về enum, đặc biệt là số các giá trị. Đối tượng Class cung cấp thông tin này (IMO sẽ tốt hơn nếu sử dụng loại mô tả enum cụ thể). Nếu bạn không có sẵn Class, bạn luôn có thể sử dụng HashMap với một số hình phạt. Tôi đoán bạn có thể tạo một số điện thoại có thể phát triển/không được cam kết EnumMap giống như Map.

+0

HashMap không được để trống, nhưng sẽ tốt nếu nó chỉ chứa một số phần tử chứ không phải toàn bộ khóa chính. –

8

Tom's câu trả lời là chính xác, nhưng để giải quyết điểm khác của bạn: lý do thông tin này không thể được suy ra từ thông số loại, K, là do type erasure.

1

Generics là một tính năng thời gian biên dịch, tuy nhiên lớp K này là cần thiết trong thời gian chạy, một cái gì đó generics sẽ không làm trong trường hợp này.

2

Khi những người khác chỉ ra Generics là một tính năng của trình biên dịch. Các jvm không có hỗ trợ thực sự cho generics chính nó. Điều này có nghĩa là không thể sử dụng thông tin chung trong thời gian chạy.

Đối với EnumMap<K extends Enum> điều này có nghĩa là bạn nhận được EnumMap<Enum> khi chạy mà không có bất kỳ thông tin nào về K. Giới hạn này thời gian chạy.

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