Respostas:
Você não pode usar tipos primitivos como argumentos genéricos em Java. Use em vez disso:
Map<String, Integer> myMap = new HashMap<String, Integer>();
Com o boxe automático / unboxing, há pouca diferença no código. O boxe automático significa que você pode escrever:
myMap.put("foo", 3);
ao invés de:
myMap.put("foo", new Integer(3));
O boxe automático significa que a primeira versão é convertida implicitamente na segunda. Desembalar automaticamente significa que você pode escrever:
int i = myMap.get("foo");
ao invés de:
int i = myMap.get("foo").intValue();
A chamada implícita para intValue()
significa que, se a chave não for encontrada, ela gerará um NullPointerException
, por exemplo:
int i = myMap.get("bar"); // NullPointerException
O motivo é o apagamento do tipo . Ao contrário, digamos, no C #, os tipos genéricos não são retidos no tempo de execução. Eles são apenas "açúcar sintático" para conversão explícita, para que você faça isso:
Integer i = (Integer)myMap.get("foo");
Para dar um exemplo, esse código é perfeitamente legal:
Map<String, Integer> myMap = new HashMap<String, Integer>();
Map<Integer, String> map2 = (Map<Integer, String>)myMap;
map2.put(3, "foo");
O GNU Trove suporta isso, mas não usa genéricos. http://trove4j.sourceforge.net/javadocs/gnu/trove/TObjectIntHashMap.html
Você não pode usar tipos primitivos em HashMap
. int
ou double
não funciona. Você precisa usar o tipo de anexo. Por exemplo
Map<String,Integer> m = new HashMap<String,Integer>();
Agora, ambos são objetos, então isso funcionará.
int é um tipo primitivo, você pode ler o que significa um tipo primitivo em java aqui , e um Map é uma interface que possui objetos como entrada:
public interface Map<K extends Object, V extends Object>
O objeto significa uma classe e também significa que você pode criar uma outra classe que dela exista, mas não pode criar uma classe que exista de int. Portanto, você não pode usar a variável int como um objeto. Tenho duas soluções para o seu problema:
Map<String, Integer> map = new HashMap<>();
ou
Map<String, int[]> map = new HashMap<>();
int x = 1;
//put x in map
int[] x_ = new int[]{x};
map.put("x", x_);
//get the value of x
int y = map.get("x")[0];
Você pode usar o tipo de referência em argumentos genéricos, não no tipo primitivo. Então aqui você deve usar
Map<String, Integer> myMap = new HashMap<String, Integer>();
e armazene o valor como
myMap.put("abc", 5);