Java >> Java tutorial >  >> Tag >> return

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>>


Java tag