Con auto-boxing / unboxing hay poca diferencia en el código. El auto-boxeo significa que puedes escribir:
myMap.put("foo",3);
en vez de:
myMap.put("foo",newInteger(3));
El auto-boxeo significa que la primera versión se convierte implícitamente en la segunda. El desempaquetado automático significa que puede escribir:
int i = myMap.get("foo");
en vez de:
int i = myMap.get("foo").intValue();
La llamada implícita a intValue()significa que si no se encuentra la clave, generará un NullPointerException, por ejemplo:
int i = myMap.get("bar");// NullPointerException
La razón es el tipo de borrado . A diferencia, por ejemplo, en C #, los tipos genéricos no se retienen en tiempo de ejecución. Son simplemente "azúcar sintáctico" para un casting explícito que te ahorrará hacer esto:
Integer i =(Integer)myMap.get("foo");
Para darle un ejemplo, este código es perfectamente legal:
teniendo en cuenta cada código separado en una nueva línea, el código de la línea 5 primero se debe convertir a Integer antes de usar el método intValue () porque se considera un objeto cuando se usa el método get ().
int es un tipo primitivo, puede leer lo que significa un tipo primitivo en java aquí , y un mapa es una interfaz que tiene objetos como entrada:
publicinterfaceMap<K extendsObject, V extendsObject>
objeto significa una clase, y también significa que puede crear otra clase que se ejecute a partir de ella, pero no puede crear una clase que se ejecute desde int. Por lo tanto, no puede usar la variable int como un objeto. Tengo soluciones de remolque para su problema:
Map<String,Integer> map =newHashMap<>();
o
Map<String,int[]> map =newHashMap<>();int x =1;//put x in mapint[] x_ =newint[]{x};
map.put("x", x_);//get the value of xint y = map.get("x")[0];
Respuestas:
No puede usar tipos primitivos como argumentos genéricos en Java. Use en su lugar:
Con auto-boxing / unboxing hay poca diferencia en el código. El auto-boxeo significa que puedes escribir:
en vez de:
El auto-boxeo significa que la primera versión se convierte implícitamente en la segunda. El desempaquetado automático significa que puede escribir:
en vez de:
La llamada implícita a
intValue()
significa que si no se encuentra la clave, generará unNullPointerException
, por ejemplo:La razón es el tipo de borrado . A diferencia, por ejemplo, en C #, los tipos genéricos no se retienen en tiempo de ejecución. Son simplemente "azúcar sintáctico" para un casting explícito que te ahorrará hacer esto:
Para darle un ejemplo, este código es perfectamente legal:
fuente
GNU Trove admite esto pero no utiliza genéricos. http://trove4j.sourceforge.net/javadocs/gnu/trove/TObjectIntHashMap.html
fuente
No puede usar tipos primitivos en
HashMap
.int
odouble
no funciona. Tienes que usar su tipo envolvente. para un ejemploAhora ambos son objetos, así que esto funcionará.
fuente
int es un tipo primitivo, puede leer lo que significa un tipo primitivo en java aquí , y un mapa es una interfaz que tiene objetos como entrada:
objeto significa una clase, y también significa que puede crear otra clase que se ejecute a partir de ella, pero no puede crear una clase que se ejecute desde int. Por lo tanto, no puede usar la variable int como un objeto. Tengo soluciones de remolque para su problema:
o
fuente
Puede usar el tipo de referencia en argumentos genéricos, no el tipo primitivo. Así que aquí deberías usar
y almacenar valor como
fuente