2010-07-28 16 views
5

Eclipse sta dicendo "HashMap è un tipo raw" Quando uso il seguente codiceEclipse avvertimento con Java HashMap

HashMap = new HashMap(); 

Qualche idea di cosa potrebbe essere sbagliato?

+2

Try qualcosa come: HashMap h = new HashMap (); Come altri hanno menzionato, non stai specificando il tipo per la chiave e il valore. È più sicuro fornire queste informazioni, per il controllo dei tipi. –

+1

@James O meglio 'mappa finale h = new HashMap ();'. –

+0

@ Tom Hawtin: è vero, usare Map sarebbe stato migliore, ma stavo seguendo il suo esempio. :) –

risposta

17

Eclipse fornisce questo avviso quando si utilizza un valore non GenericHashMap utilizzando Java 5 o successivo.

Vedere anche: Generics Lesson in Esercitazioni Java di Sun.

Edit: In realtà, qui, ti darò un esempio troppo:

dire che voglio per mappare il nome di qualcuno alla loro Person oggetto:

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 

Questi vengono controllati al momento della compilazione; le informazioni sul tipo vengono perse in fase di esecuzione a causa del modo in cui Java implementa Generics.

+1

map.get() accetta ancora un oggetto.Potrebbe sembrare sorprendente (controlla la javadoc se non mi credi), ma Josh Bloch ha commentato questa volta una volta, dicendo che se avessero cambiato la firma per ottenere (chiave K) potrebbero causare errori per codice che è, in effetti , corretta. – waxwing

+0

@waxwing: interessante. Avrei dovuto notare che quando ho guardato le pagine Map/HashMap. Lo aggiusterò. Oh, ho anche dimenticato di menzionare ora restituisce un oggetto 'Persona'. Ops. – Powerlord

+0

@R. Bemrose: tecnicamente, 'get' restituisce ancora' Object', ma i generici dicono al compilatore di aggiungere un cast a 'Person'. –

1

Ciò che manca generici, vale a dire. Se non lo sai, imposta il compilatore eclipse su java 1.4

3

Niente sbagliato sbagliato, ma ti stai perdendo il meraviglioso mondo dei generici. A seconda dei vincoli che si desidera posizionare sui tipi utilizzati nella mappa, è necessario aggiungere i parametri del tipo. Ad esempio:

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

Questo di solito significa che si sta mescolando codice generico con codice non generico.

Ma, come il tuo esempio abituato anche compilare la sua piuttosto difficile da dire ....

1

Prova

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

invece (ovviamente sostituendo il tipo di chiave (stringa) e tipo di valore (intero)).

0

Manca il tipo generico. Devi specificare la coppia generica valore-chiave per la tua mappa. Ad esempio, la seguente è una dichiarazione che crea un'istanza di HashMap con chiave di tipo String e valore di tipo Integer.

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

Tutti questi sono risposte valide, si potrebbe anche usare l'annotazione @SurpressWarnings per ottenere lo stesso risultato, senza dover ricorrere a farmaci generici attuali. ;)

0

hashmap è un tipo grezzo e, quindi, deve essere parametrizzato cioè che cosa mai i dati si ottiene attraverso la funzione haspmap loro tipo deve essere dichiarato per ottenere le sue funzioni

ad esempio

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