Question

Lorsque je tente de déclarer un dictionnaire en tant que tel:

private Dictionary<String, int> map;

Le compilateur me donne l'erreur suivante:

  

Erreur de syntaxe sur "int" jeton, les dimensions attendues après ce jeton

Mais il fonctionne très bien avec Integer. Je suis vaguement conscient que Java traite int / Integer différemment (je viens d'un milieu .NET), mais j'espérais que quelqu'un pourrait me donner une explication complète sur les raisons que je ne peux pas utiliser les primitives dans un dictionnaire <>

Était-ce utile?

La solution

Dans primitives Java ne sont pas des objets, de sorte que vous ne pouvez pas les utiliser à la place des objets. Cependant Java / boîte automatiquement primitives Unbox (alias autoboxing ) en objets afin que vous puissiez faire des choses comme:

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

Mais ce qui est vraiment juste le compilateur convertissant automatiquement les types pour vous.

Autres conseils

Dans .Net, les types "primitifs" sont soutenus par des objets. En Java, il y a une distinction entre les types primitifs dur et objets. Java 5 introduit autoboxing, qui peut contraindre entre les deux dans certaines situations. Cependant, parce que le système Java génériques utilise le type d'effacement, il n'y a pas suffisamment d'informations pour autobox dans ce cas.

collections Java ne permettent que des références non primitives. Vous devez utiliser les classes d'emballage (dans ce cas java.lang.Integer) de faire ce que vous recherchez:

private Dictionary<String, Integer> map;

ils vous pouvez faire des choses comme:

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

et

map.put("world", 42);

et Java utilise autoboxing / unboxing pour traiter les détails de la conversion pour vous.

est une petite description dessus.

Pour développer la réponse de TofuBeer.

int est une primitive

Entier est un objet.

Generics ne supporte pas les primitives.

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

Cest l'astuce spécifier le type pour le faire fonctionner avec des primitives

Dans votre adaptateur

en utilisant le même dans le paquet-info signifie que vous le faites dans le monde pour ce paquet

trouvé cela après l'expérimentation.

public class MyAdapter extends XmlAdapter<String, Integer> {

Parce que Java, les primitives sont primitives Truely. En Java int passera par la valeur, tandis que Integer passera une référence. Dans .NET ou int Int32 etc sont juste des noms différents.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top