34 votes

Y a-t-il une raison pour laquelle EnumMap et EnumSet ne sont pas navigables ?

Enum est Comparable ce qui signifie que vous pouvez avoir

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

Ces derniers ont des temps d'accès O(ln N).

Les collections Enum ont des temps d'accès O(1), mais ne sont pas navigables.

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

Je me demandais s'il y avait une raison pour laquelle les collections Enum n'étaient pas navigables (et triées), c'est-à-dire que j'ai manqué quelque chose ?

39voto

Lukas Eder Points 48046

De nombreuses fonctionnalités "évidentes" sont absentes du JDK et de ses diverses API. Pourquoi cette fonctionnalité particulière a-t-elle été omise ou oubliée ? Nous ne pouvons que deviner. Mais votre question est une RFE chez Sun/Oracle depuis longtemps :

Vous pourriez soutenir ces RFE en les commentant. Remarque : voici une réponse de Joshua Bloch qui fait autorité sur le sujet :

Je me rappelle vaguement l'avoir considéré, mais je ne me souviens pas si nous l'avons l'avons explicitement rejeté avec raison. Nous étions à court de temps temps lorsque j'ai implémenté EnumSet et EnumMap, et il est possible que le temps ait joué un rôle dans notre décision. le temps a joué un rôle dans notre décision

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

Donc même il J'ai dû deviner :-)

9voto

Marko Topolnik Points 77257

Je pense que la navigabilité n'a pas été considérée comme un cas d'utilisation majeur pour les ensembles d'énumérations. Il n'y a rien dans l'implémentation qui empêcherait la navigabilité. Les rares cas d'utilisation qui combinent le besoin d'un ensemble de membres d'énumération avec la navigabilité sont couverts par l'implémentation de l'ensemble d'énumération. TreeSet y TreeMap .

2voto

bestsss Points 6403

L'article ne répond pas directement à la question et ne tente pas de le faire, il explique simplement pourquoi Navigable a été introduit.

Post comme on me l'a demandé (et c'est trop long pour un commentaire)

La réponse courte est que Navigable existe parce que nous n'avions pas quelque chose comme des "défenseurs" à venir -- Sorted ne décrivait pas toutes les fonctionnalité commune, et il n'y avait aucun moyen de le faire sauf à d'introduire une nouvelle interface. Dans la pratique, je suis sûr que "Sorted" est encore utilisé beaucoup plus souvent que "Navigable" en tant que type de déclaration, parce que la plupart des gens n'ont pas besoin des méthodes définies dans Navigable mais pas dans Sorted. De plus, "Navigable" n'est tout simplement pas un nom très agréable :-)

-Doug

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X