Me preguntaba, ¿hay alguna razón por la cual EnumSet se implementa como clase abstracta y EnumMap se implementa como clase concreta?¿Por qué EnumSet se implementa como clase abstracta y EnumMap se implementa como clase concreta?
Respuesta
EnumSet
tiene en realidad dos implementaciones - uno para enumeraciones con 64 o menos elementos (banderas que indican la presencia de valores en el conjunto se almacenan como long
) y otra para otras enumeraciones (banderas se almacenan como long[]
). métodos de fábrica de retorno EnumSet
uno de ellos en función de la clase de enumeración se ha pasado.
una optimización de este tipo no tiene sentido para EnumMap
(ya que se necesita matriz para almacenar los valores de todos modos), por lo tanto, EnumMap
es una clase concreta.
EnumSet
utiliza dos implementaciones, RegularEnumSet
y JumboEnumSet
, dependiendo del tamaño de su enumeración (64 elementos siendo el umbral). Los métodos de fábrica delegan a la implementación apropiada.
EnumMap
por el contrario funciona igual para todos los tipos de enum (mantiene una matriz de todos los elementos enum y una matriz de valores de igual tamaño), por lo que no es necesaria una clase abstracta.
- 1. ¿Por qué se 'implementa' como 'como'?
- 2. clase abstracta no implementa interfaz
- 3. Clase base abstracta vs. Clase concreta como SuperTipo
- 4. C# clase no implementa heredó miembro abstracta
- 5. Java clase abstracta implementa la interfaz
- 6. ¿Por qué la clase HttpServlet se declara como abstracta?
- 7. Generics: heredan de una clase abstracta que implementa una interfaz
- 8. ¿Por qué no se implementa JML como anotaciones en Java?
- 9. ¿Cómo se implementa una clase en C?
- 10. clase concreta de la clase abstracta
- 11. ¿En qué se diferencia la clase abstracta de la clase concreta?
- 12. ¿Se puede burlar de un objeto que implementa una interfaz Y una clase abstracta?
- 13. Clase genérica e implementa interfaz
- 14. ¿Implementar clase abstracta como una clase local? pros y contras
- 15. Derivando una clase abstracta de la clase concreta
- 16. ¿Se puede usar una clase abstracta como tipo de referencia?
- 17. ¿Cómo se implementa BigDecimal?
- 18. ¿El compilador de C# se queja de que la clase abstracta no implementa la interfaz?
- 19. argumento de método se extiende clase implementa la interfaz
- 20. PhoneGap y cómo se implementa
- 21. ¿Por qué se implementa zipWithIndex en Iterable y no Traversable?
- 22. ¿Cómo se implementa HttpSession?
- 23. ¿Cómo se implementa set()?
- 24. ¿Por qué AtomicInteger implementa Serializable
- 25. ¿Por qué .NET ObservableCollection <T> se implementó como una clase y no como una interfaz?
- 26. ¿cómo se implementa sarcmark?
- 27. ¿Por qué se pasa ServletConfig obj a init() de GenericServlet cuando la clase implementa la interfaz?
- 28. ¿Por qué HttpServlet implementa Serializable?
- 29. ¿Cómo se implementa "const"?
- 30. Uso de Windows Form como clase abstracta: ¿qué patrón usar?
OK. Tiene sentido ahora mismo :) –