2010-07-28 26 views
5

Eclipse está diciendo "HashMap es un tipo bruto" Cuando uso el siguiente códigoEclipse con Java Advertencia HashMap

HashMap = new HashMap(); 

Cualquier idea de lo que podría estar mal?

+2

Try algo así como: HashMap h = new HashMap (); Como mencionaron otros, no especifica el tipo de la clave y el valor. Es más seguro dar esta información, para verificar el tipo. –

+1

@James O mejor 'mapa final h = new HashMap ();'. –

+0

@Tom Hawtin - Cierto, usar Map sería mejor, pero solo estaba siguiendo su ejemplo. :) –

Respuesta

17

Eclipse le dará esa advertencia cuando utilice un GenericHashMap utilizando Java 5 o posterior.

Vea también: El Generics Lesson en Sun's Java Tutorials.

Editar: En realidad, aquí, voy a dar un ejemplo también:

decir que quiero asignar el nombre de alguien a su Person objeto:

Map<String, Person> map = new HashMap<String, Person>(); 
// The map.get method now returns a Person 
// The map.put method now requires a String and a Person 

Estos se comprueban en tiempo de compilación; la información de tipo se pierde en tiempo de ejecución debido a la forma en que Java implementa Genéricos.

+1

map.get() aún toma un objeto.Puede parecer sorprendente (compruebe el javadoc si no me cree), pero Josh Bloch comentó esta vez, diciendo que si hubieran cambiado la firma para obtener (clave K) podrían causar errores para el código que, de hecho, correcto – waxwing

+0

@waxwing: Interesante. Debería haberlo notado cuando miré las páginas de Mapa/HashMap. Lo arreglaré. Ah, también olvidé mencionar get ahora devuelve un objeto 'Person'. Whoops. – Powerlord

+0

@R. Bemrose: técnicamente, 'get' aún devuelve' Object', pero los genéricos le dicen al compilador que agregue un molde a 'Person'. –

1

Faltan genéricos, es decir. Si no sabes esto, configura el compilador de eclipse en java 1.4

3

Nada incorrecto exactamente, pero te estás perdiendo el maravilloso mundo de los genéricos. Según las restricciones que desee colocar en los tipos utilizados en su mapa, debe agregar parámetros de tipo. Por ejemplo:

Map<String, Integer> map = new HashMap<String, Integer>(); 
0

Eso generalmente significa que está mezclando código genérico con código no genérico.

Pero como su ejemplo incluso no compilar su vez difícil decir ....

1

Trate

HashMap<String,Integer> map = new HashMap<String,Integer>(); 

lugar (obviamente reemplazar el tipo de clave (cadena) y el tipo de valor (entero)).

0

Falta el tipo genérico. Debe especificar el par genérico clave-valor para su mapa. Por ejemplo, la siguiente es una declaración que ejemplifica un HashMap con una clave de tipo String y un valor de tipo Integer.

Map<String, Integer> map = new HashMap<String, Integer>(); 
0

Todas estas son respuestas válidas, también se puede utilizar la anotación @SurpressWarnings para obtener el mismo resultado, sin tener que recurrir a los genéricos reales. ;)

0

HashMap es un tipo de prima y por lo tanto debe ser parametrizado es decir lo que cada vez los datos que obtenemos a través de la función haspmap su tipo debe ser declarada para conseguir sus funciones

por ejemplo

HashMap<String, Integer> map = new HashMap<String, Integer>();