Dichiarare hash1
come un HashMap<String, ?>
dettato che la variabile hash1
può contenere qualsiasi HashMap
che abbia una chiave diString
e qualsiasi tipo di valore.
HashMap<String, ?> map;
map = new HashMap<String, Integer>();
map = new HashMap<String, Object>();
map = new HashMap<String, String>();
Tutto quanto sopra è valido, perché il variabile map
può memorizzare una di quelle mappe hash. A quella variabile non importa quale sia il tipo di Valore, dell'hashmap che contiene.
Avere un carattere jolly no consente tuttavia di inserire alcun tipo di oggetto nella tua mappa. infatti, con la mappa hash sopra, non puoi inserire nulla usando la map
variabile:
map.put("A", new Integer(0));
map.put("B", new Object());
map.put("C", "Some String");
Tutte le chiamate al metodo sopra riportate comporteranno un errore in fase di compilazione perché Java non sa quale sia il tipo di valore all'interno di HashMap map
.
Puoi ancora ottenere un valore dalla mappa hash. Anche se "non conosci il tipo di valore" (perché non sai quale tipo di mappa hash è all'interno della tua variabile), puoi dire che tutto è una sottoclasse di Object
, e quindi qualunque cosa tu esca dalla mappa sarà del tipo Oggetto:
HashMap<String, Integer> myMap = new HashMap<>();// This variable is used to put things into the map.
myMap.put("ABC", 10);
HashMap<String, ?> map = myMap;
Object output = map.get("ABC");// Valid code; Object is the superclass of everything, (including whatever is stored our hash map).
System.out.println(output);
Il blocco di codice sopra verrà stampato 10 sulla console.
Quindi, per finire, usa un HashMap
carattere jolly quando non ti interessa (cioè non importa) quali sono i tipi di HashMap
, ad esempio:
public static void printHashMapSize(Map<?, ?> anyMap) {
// This code doesn't care what type of HashMap is inside anyMap.
System.out.println(anyMap.size());
}
Altrimenti, specifica i tipi di cui hai bisogno:
public void printAThroughZ(Map<Character, ?> anyCharacterMap) {
for (int i = 'A'; i <= 'Z'; i++)
System.out.println(anyCharacterMap.get((char) i));
}
Nel metodo sopra, dovremmo sapere che la chiave della mappa è un Character
, altrimenti non sapremmo quale tipo usare per ottenere valori da essa. Tutti gli oggetti hanno un toString()
metodo, tuttavia, quindi la mappa può avere qualsiasi tipo di oggetto per i suoi valori. Possiamo ancora stampare i valori.