2010-02-19 11 views
11

¿por qué HashMap extiende AbstractMap e implementa Map? está extendiendo AbstractMap no es suficiente, porque AbstractMap implementa Map?Java.util.HashMap: ¿por qué HashMap extiende AbstractMap e implementa Map?

+1

esencialmente la misma pregunta que esto: http://stackoverflow.com/questions/2165204/why-does-linkedhashsete-extend-hashsete-and-implement-sete - - versión corta: esta redundancia tiene un impacto en cómo se genera Javadoc. –

+0

Me impulsaron a investigar, y en realidad, Javadoc no era el problema. Nueva versión corta: fue solo un error. –

+0

Heh. Pregunté sobre esto hoy también. Me dijeron que era un "error bienintencionado" y que el razonamiento original era la interfaz versus la implementación que mencioné en mi respuesta. –

Respuesta

5

Es redundante. Sospecho que fue hecho por "documentación". HashMap implementa Map, y puede confiar en eso. El hecho de que extienda AbstractMap es discutiblemente solo un detalle de implementación. (Aunque es muy poco probable que las futuras versiones de HashMap no ampliarían AbstractMap, ya que probablemente algún código por ahí que espera HashMap sea asignable a AbstractMap.)

0

Es redundante, pero no se pierde nada. Si no quieren implementar Map en AbstractMap en el futuro, todavía funcionará.

+3

Excepto que es un cambio radical: en algún lugar alguien habrá hecho 'Map map = objectOfTypeAbstractMap'. –

0

Una cosa más es que AbstractMap es un detalle de implementación. Podría estar ausente en una versión futura del JDK de Oracle. Podría estar ausente en una versión actual del JDK de IBM. Pero ya sea que esté presente o no, el HashMap siempre debe ajustarse al contrato de la Lista. Por lo tanto, está explícitamente capturado en la declaración de clase, indicando 'HashMap implementa Mapa'

Cuestiones relacionadas