Frage

Wenn ich ein Wörterbuch als solche deklarieren:

private Dictionary<String, int> map;

Der Compiler gibt mir die folgende Fehlermeldung:

  

Syntaxfehler auf Token "int", Abmessungen nach diesem Token erwartet

Aber es funktioniert mit Integer in Ordnung. Ich bin vage bewusst, dass Java behandelt int / Integer anders (ich von einem .NET-Hintergrund kommen), aber ich habe gehofft, dass mir jemand eine vollständige Erklärung geben könnte, warum ich nicht Primitiven in einem Wörterbuch verwenden kann <>

War es hilfreich?

Lösung

In Java Primitive sind keine Objekte, so dass Sie sie nicht anstelle von Objekten verwendet werden. Allerdings wird Java automatisch Box / unbox Primitiven (aka Autoboxing ) in Objekte, so dass Sie tun können, Dinge wie:

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

Aber das ist wirklich nur die Compiler automatisch Typen für Sie konvertieren.

Andere Tipps

In .Net, "primitive" Typen werden durch Objekte gesichert. In Java gibt es eine harte Unterscheidung zwischen primitiven Typen und Objekten. Java 5 eingeführt Autoboxing, die zwischen den beiden in bestimmten Situationen zwingen kann. Da jedoch der Java Generics Systemtyp Löschen verwendet, gibt es nicht genügend Informationen, um autobox in diesem Fall.

Java Sammlungen nur Verweise nicht Primitiven ermöglichen. Sie müssen die Wrapper-Klassen (in diesem Fall java.lang.Integer) verwenden, um zu tun, was Sie nach:

private Dictionary<String, Integer> map;

Sie können Dinge wie:

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

und

map.put("world", 42);

und Java verwendet Autoboxing / Unboxing mit den Einzelheiten der Konvertierung für Sie zu behandeln.

Hier ist eine kleine Beschreibung auf sie.

Um auf TofuBeer Antwort zu erweitern.

int ist eine primitive

Integer ist ein Objekt.

Generics unterstützt keine Primitiven.

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

Das ist der Trick Typ angeben, um es mit Primitiven funktioniert

In Ihrem Adapter

das gleiche mit im Paket-info bedeutet, dass Sie es tun global für das Paket

Sie haben diese nach experimentieren.

public class MyAdapter extends XmlAdapter<String, Integer> {

Da in Java die Primitiven truely Primitive sind. In Java int wird nach Wert übergeben, während Integer einen Verweis übergeben wird. In .NET int oder Int32 usw. sind nur unterschiedliche Namen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top