Pregunta

Cuando intento para declarar un diccionario como tal:

private Dictionary<String, int> map;

El compilador me da el siguiente error:

  

Error de sintaxis en token "int", Dimensiones esperado después de este token

Pero funciona bien con Integer. Estoy vagamente consciente de que Java trata a int / Integer diferente (Vengo de un fondo .NET), pero yo estaba esperando que alguien me pudiera dar una explicación completa de por qué no puedo usar primitivas en un diccionario <>

¿Fue útil?

Solución

En primitivos de Java no son objetos, por lo que no se puede utilizar en lugar de los objetos. Sin embargo Java se casilla automáticamente primitivas / Unbox (también conocido como autoboxing ) en objetos para que pueda hacer cosas como:

List<Integer> intList = new LinkedList<Integer>();
intList.add(1);
intList.add(new Integer(2));
...
Integer first = intList.get(0);
int second = intList.get(1);

Pero esto es sólo el compilador la conversión automática de tipos para usted.

Otros consejos

En .Net, tipos "primitivos" están respaldados por los objetos. En Java, hay una distinción clara entre los tipos primitivos y objetos. Java 5 introdujo autoboxing, que puede coaccionar entre los dos en ciertas situaciones. Sin embargo, debido a que el sistema de los genéricos de Java utiliza tipo de borrado, no hay suficiente información para Autobox en este caso.

colecciones de Java no sólo permiten referencias primitivas. Es necesario utilizar las clases de contenedor (en este caso java.lang.Integer) para hacer lo que está buscando:

private Dictionary<String, Integer> map;

que le puede hacer cosas como:

int foo = map.get("hello");

y

map.put("world", 42);

y Java utiliza autoboxing / unboxing para hacer frente a los detalles de la conversión para usted.

Aquí es una pequeña descripción en él.

Para ampliar la respuesta de TofuBeer.

int es una primitiva

entero es un objeto.

Los genéricos no soporta primitivas.

@XmlJavaTypeAdapter(value=MyAdapter.class, type=int.class)

Eso es el truco especifique el tipo de hacer que funcione a partir de primitivas

En su adaptador

utilizando el mismo paquete de información-significará lo haces a nivel mundial para ese paquete

Encontrados esto después de la experimentación.

public class MyAdapter extends XmlAdapter<String, Integer> {

Debido a que en las primitivas de Java son verdaderamente primitivas. En Java int pasará por valor, mientras que Integer pasará una referencia. En int .NET o Int32 etc son sólo diferentes nombres.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top