2008-11-04 5 views
6

Normalmente escribo las declaraciones de mi mapa pero estaba haciendo un mantenimiento y encontré uno sin escribir. Esto me hizo pensar (¡Oh, no!). ¿Cuál es la tipificación predeterminada de una declaración de Mapa? Considere lo siguiente:Tipos predeterminados de HashMap para K y V

Map map = new HashMap(); 
map.put("one", "1st"); 
map.put("two", new Integer(2)); 
map.put("three", "3rd"); 
for (Map.Entry entry : map.entrySet()){ 
    System.out.println(entry.getKey() + " -> " + entry.getValue()); 
} 

estos errores con tipos incompatibles en Map.Entry. Entonces, si escribo la declaración con:

Map<Object,Object> map = new HashMap(); 

, todo funciona bien. Entonces, ¿cuál es el tipo predeterminado que se establece en la declaración? ¿O me estoy perdiendo algo más?

Respuesta

4

El tipo es java.lang.Object.

El para constructo toma un tipo de Iterable y llama a su iterador método. Como el conjunto no se escribe con genéricos, el iterador devuelve objetos del tipo Objeto. Deben emitirse explícitamente al tipo Map.Entry.

Map map = new HashMap(); 
map.put("one", "1st"); 
map.put("two", new Integer(2)); 
map.put("three", "3rd"); 
for (Object o : map.entrySet()) { 
    Map.Entry entry = (Map.Entry) o; 
    System.out.println(entry.getKey() + " -> " + entry.getValue()); 
} 
8

No hay un tipo predeterminado.

Los tipos en los genéricos de Java son solo para la verificación en tiempo de compilación. Se borran en el tiempo de ejecución y esencialmente desaparecen.

Piense en los genéricos como un ayudante estático para a) documentar mejor su código, yb) habilitar algunas comprobaciones limitadas en tiempo de compilación para la seguridad del tipo.

1

HashMap es una colección de objetos, contenedores Think C++. Cada elemento del mapa es un "cubo" para contener datos.
Está colocando diferentes tipos de datos en los segmentos, el hashmap necesita saber que estos no son todos del mismo tipo de datos. Si solo se colocara un tipo de datos en el hashmap, recibiría una advertencia pero se compilaría.

Cuestiones relacionadas