HashMap(nøgle:String, værdi:ArrayList) returnerer et objekt i stedet for ArrayList?
Hvordan kommer HashMap-erklæringen til udtryk i dette omfang? Det skal være:
HashMap<String, ArrayList> dictMap
Hvis ikke, antages det at være objekter.
For eksempel, hvis din kode er:
HashMap dictMap = new HashMap<String, ArrayList>();
...
ArrayList current = dictMap.get(dictCode);
det vil ikke virke. I stedet ønsker du:
HashMap<String, ArrayList> dictMap = new HashMap<String, Arraylist>();
...
ArrayList current = dictMap.get(dictCode);
Den måde, generiske stoffer fungerer på, er, at typeinformationen er tilgængelig for compileren, men ikke tilgængelig under kørsel. Dette kaldes type sletning. Implementeringen af HashMap (eller enhver anden generisk implementering) beskæftiger sig med Object. Typeinformationen er der til typesikkerhedstjek i kompileringstiden. Se Generics-dokumentationen.
Bemærk også, at ArrayList
er også implementeret som en generisk klasse, og derfor vil du måske også angive en type der. Forudsat din ArrayList
indeholder din klasse MyClass
, linjen ovenfor kan være:
HashMap<String, ArrayList<MyClass>> dictMap
public static void main(String arg[])
{
HashMap<String, ArrayList<String>> hashmap =
new HashMap<String, ArrayList<String>>();
ArrayList<String> arraylist = new ArrayList<String>();
arraylist.add("Hello");
arraylist.add("World.");
hashmap.put("my key", arraylist);
arraylist = hashmap.get("not inserted");
System.out.println(arraylist);
arraylist = hashmap.get("my key");
System.out.println(arraylist);
}
null
[Hello, World.]
Fungerer fint... måske finder du din fejl i min kode.
Jeg formoder, at dit dictMap er af typen HashMap
, hvilket gør den som standard til HashMap<Object, Object>
. Hvis du vil have det mere specifikt, skal du erklære det som HashMap<String, ArrayList>
, eller endnu bedre, som HashMap<String, ArrayList<T>>