valueof - java enum with values




¿Hay alguna razón por la cual EnumMap y EnumSet no son navegables? (2)

Enum es comparable, lo que significa que puede tener

NavigableSet<AccessMode> modes = new TreeSet<>();
NavigableMap<AccessMode, Object> modeMap = new TreeMap<>();

Estos tienen tiempos de acceso O (ln N).

Las colecciones Enum tienen tiempos de acceso O (1), pero no son navegables.

NavigableSet<AccessMode> modes = EnumSet.noneOf(AccessMode.class); // doesn't compile
NavigableMap<AccessMode, Object> modeMap = new EnumMap<>(AccessMode.class);  // doesn't compile

Me preguntaba si había una razón por la que las colecciones de Enum no fueran Navegables (y Clasificadas). es decir, me estoy perdiendo algo?

https://code.i-harness.com


Mi mejor suposición es que la navegabilidad no se consideraba un caso de uso importante para los conjuntos enum. No hay nada en la implementación que impida la navegabilidad. Los raros casos de uso que combinan la necesidad de un conjunto de miembros enum con navegabilidad están cubiertos por TreeSet y TreeMap .


Muchas características "obvias" faltan en el JDK y sus diversas API. ¿Por qué esta característica particular fue omitida / olvidada? Sólo podemos adivinar. Pero su pregunta ha sido una RFE en Sun / Oracle durante mucho tiempo:

Puedes apoyar esas RFE comentándolos. Nota, aquí hay una respuesta autorizada de Joshua Bloch sobre el tema:

Recuerdo vagamente que lo consideré, pero no puedo recordar si lo rechazamos explícitamente por una buena razón. Nos quedaba muy poco tiempo cuando implementé EnumSet y EnumMap, y es posible que el tiempo haya jugado un papel en nuestra decisión

http://comments.gmane.org/gmane.comp.java.jsr.166-concurrency/2158

Así que incluso él tuvo que adivinar :-)





enums