Declarar hash1
como HashMap<String, ?>
dita que a variável hash1
pode conter qualquer uma HashMap
que tenha uma chave String
e qualquer tipo de valor.
HashMap<String, ?> map;
map = new HashMap<String, Integer>();
map = new HashMap<String, Object>();
map = new HashMap<String, String>();
Todas as opções acima são válidas, porque a variável map
pode armazenar qualquer um desses mapas de hash. Essa variável não se importa com o tipo Value, do hashmap que ela contém.
Ter um curinga que não , no entanto, deixar você colocar qualquer tipo de objeto em seu mapa. de fato, com o mapa de hash acima, você não pode colocar nada usando a map
variável:
map.put("A", new Integer(0));
map.put("B", new Object());
map.put("C", "Some String");
Todas as chamadas de método acima resultarão em um erro em tempo de compilação porque o Java não sabe qual é o tipo Value do HashMap map
.
Você ainda pode obter um valor do mapa de hash. Embora você "não saiba o tipo do valor" (porque não sabe que tipo de mapa de hash está dentro da sua variável), você pode dizer que tudo é uma subclasse Object
e, portanto, o que quer que você saia do mapa será do tipo Objeto:
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);
O bloco de código acima imprimirá 10 no console.
Portanto, para finalizar, use a HashMap
com curingas quando você não se importa (ou seja, não importa) quais são os tipos de HashMap
, por exemplo:
public static void printHashMapSize(Map<?, ?> anyMap) {
// This code doesn't care what type of HashMap is inside anyMap.
System.out.println(anyMap.size());
}
Caso contrário, especifique os tipos que você precisa:
public void printAThroughZ(Map<Character, ?> anyCharacterMap) {
for (int i = 'A'; i <= 'Z'; i++)
System.out.println(anyCharacterMap.get((char) i));
}
No método acima, precisaríamos saber que a chave do mapa é uma Character
, caso contrário, não saberíamos que tipo usar para obter valores dela. Todos os objetos têm um toString()
método, no entanto, para que o mapa possa ter qualquer tipo de objeto para seus valores. Ainda podemos imprimir os valores.