2010-08-11 8 views

Respuesta

2

El Map tanto, conoce todas las claves posibles. Se llama (internamente) el keyUniverse. Los comentarios dice:

Todos los valores que comprenden K. (en caché para un rendimiento)

5

las implementaciones de EnumMap necesidades metainformación acerca de la enum, en particular, el número de valores. El objeto Class proporciona esta información (IMO hubiera sido mejor buscar un tipo de descriptor de enumeración específico). Si no tiene el Class disponible, siempre puede usar HashMap con alguna penalización. Supongo que podría crear un EnumMap creíble/sin compromiso, como Map.

+0

el HashMap no puede estar vacío, pero está bien si contiene sólo algunos elementos y no el keyUniverse completa. –

8

Tom's La respuesta es correcta, pero para abordar su otro punto: el motivo por el cual esta información no puede deducirse del parámetro tipo, K, se debe a type erasure.

1

genéricos es una característica de tiempo de compilación, sin embargo se necesita esta clase K en tiempo de ejecución, algo que los genéricos no van a hacer en este caso.

2

Como otros señalan que los genéricos son una característica del compilador. El jvm no tiene ningún soporte real para los genéricos en sí. Esto significa que la información genérica no se puede usar en tiempo de ejecución.

Para el EnumMap<K extends Enum> esto significa que se obtiene una EnumMap<Enum> en tiempo de ejecución sin ningún tipo de información sobre el K. Esta limitación de los genéricos de Java se puede evitar pasar por las clases de los argumentos genéricos a un constructor que todavía existen los objetos de clase en tiempo de ejecución

Cuestiones relacionadas