java.util.Dictionaryの型パラメータとしてint型を使用します
-
18-09-2019 - |
質問
私のような辞書を宣言しようとすると:
private Dictionary<String, int> map;
コンパイラは私に次のエラーを与えます:
トークン「INT」の構文エラー、
このトークンの後に予想される寸法
しかし、それはInteger
で正常に動作します。私は、Javaが異なっint
/ Integer
を(私はNETの背景から来る)扱うことを漠然と認識してんだけど、私は誰かが私に私が辞書<>
解決
Javaのプリミティブでは、オブジェクトではありませんので、あなたは、オブジェクトの代わりにそれらを使用することはできません。しかし、Javaは自動的に/ <(別名オートボクシング/ VHS版プリミティブをボックスしますA>)オブジェクトにはあなたのようなことを行うことができるようにます:
List<Integer> intList = new LinkedList<Integer>();
intList.add(1);
intList.add(new Integer(2));
...
Integer first = intList.get(0);
int second = intList.get(1);
しかし、これは本当に自動的にあなたのための型を変換するだけでコンパイラです。
他のヒント
.NETで、「プリミティブ」型は、オブジェクトが付いています。 Javaでは、プリミティブ型とオブジェクト間のハードの区別があります。 Java 5のは、特定の状況では両者の間に強制することができますオートボクシングを導入しました。 Javaのジェネリックシステムは型消去を使用しているためしかし、この場合はAutoBoxのに十分な情報がありません。
Javaコレクションのみ許可の参照ではないプリミティブ。あなたは後にしている何をするために(この場合はjava.lang.Integerの)ラッパークラスを使用する必要があります:
private Dictionary<String, Integer> map;
彼らはあなたのようなことを行うことができます:
int foo = map.get("hello");
と
map.put("world", 42);
とJavaは、あなたのための変換の詳細に対処するためにオートボクシング/アンボクシングを使用します。
ここに少し説明ですその上ます。
TofuBeerの答えに展開します。
intは原始的である。
整数オブジェクトです。
ジェネリック医薬品は、プリミティブをサポートしていません。
@XmlJavaTypeAdapter(value=MyAdapter.class, type=int.class)
トリック厥それはプリミティブで動作させるために型を指定する
あなたのアダプタで
あなたはそのパッケージに対してグローバルにそれを行うパッケージ情報で同じを使用すると意味します。
試した後、これを見つけます。
public class MyAdapter extends XmlAdapter<String, Integer> {
Javaでのプリミティブは本当にプリミティブなので。 int
基準を通過しながら、JavaではInteger
は、値によって通過します。などの.NET intまたはのInt32では単に別の名前です。