34 votes

Utilisation de int comme paramètre de type pour java.util.Dictionary

Quand j'ai essayer 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 le jeton "int", Dimensions prévu après ce jeton

Mais il fonctionne très bien avec Integer. Je suis vaguement au courant que Java friandises int / Integer différemment (je viens d'un .NET l'arrière-plan), mais j'espérais que quelqu'un pourrait me donner une explication complète des raisons pour lesquelles je ne peux pas utiliser les primitives dans un Dictionnaire<>

40voto

Jeremy Raymond Points 2450

En Java, les primitives ne sont pas des objets, vous ne pouvez donc pas les utiliser à la place des objets. Cependant, Java encapsule automatiquement les primitives ( Unoboxing ) dans les 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 il s’agit en réalité du compilateur qui convertit automatiquement les types pour vous.

9voto

JohnE Points 219

En .Net, les types "primitifs" sont sauvegardés par des objets. En Java, il existe une distinction difficile entre les types primitifs et les objets. Java 5 a introduit l'autoboxing, qui peut faire pression entre les deux dans certaines situations. Cependant, étant donné que le système générique Java utilise la suppression de type, il n’ya pas assez d’informations pour effectuer une sélection automatique dans ce cas.

5voto

TofuBeer Points 32441

Java collections autoriser uniquement les références non primitives. Vous avez besoin d'utiliser les classes wrapper (dans ce cas, java.lang.Entier) à faire ce que vous êtes après:

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 l'autoboxing/unboxing de traitent les détails de la conversion pour vous.

Ici est un peu de description sur elle.

1voto

Keibosh Points 944

Pour développer la réponse de TofuBeer.

int est un primitif

Entier est un objet.

Les génériques ne supportent pas les primitives.

1voto

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

C'est le truc spécifier le type pour le faire fonctionner avec des primitives

Dans votre adaptateur

en utilisant la même chose dans paquet-info signifiera que vous le faites globalement pour ce paquet

Trouvé ceci après avoir expérimenté.

 public class MyAdapter extends XmlAdapter<String, Integer> {
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X