2010-12-13 6 views
6

整数、文字列などの値が異なるタイプのマップが必要です。Javaの問題は、ここではプリミティブがObjectではないことです。これはハイブリッド辞書を持つことができない可能性があることを示しています。私はこれを確認したい。さまざまなデータ型の値を受け入れる辞書がありますか?

+0

も参照してください。http://stackoverflow.com/questions/2001755/using-int-as-a-type-parameter-for-java-util-dictionary – Fortega

+1

コメントのためにデザインをより多く共有したいと思うかもしれません。私の経験では、マップでさまざまなタイプの値を使用することは、最適設計よりも劣っていることがよくあります。 –

+0

私はツリーを作成することができるJSONデシリアライザを、指定されたターゲットクラスに変換するのではなく、メッセージに基づいて作成したいと考えています。だから辞書(ディクショナリまたは名前がどんなものであれ)をマップするか、Jon SkeetのようにリストがJavaの自動ボクシングを前提にしています。また、これを行う素晴らしいJSON直列化 - 逆シリアル化ライブラリがあると仮定します。 Gsonは、例えば、メッセージがデシリアライズされるタイプを必要とします。したがって、Gsonは私にとって役に立たない。私の問題を理解したいと思っています。 – ada

答えて

1

autoboxingを利用でき、intの代わりにIntegerなどを使用できます。

対応タイプ(IntegerDoubleBool、...)は、標準Map<Object, Whatever>を使用し、それを任意のものを投げることができるように、オブジェクトを継承します。

8

あなたはちょうどMap<String, Object>(またはあなたのキータイプが何であれ)がほしいと思うように聞こえます。

プリミティブ値は適切に箱詰めされます値とVHS版それを取得するために、あなたは特定のラッパー型に言及していることを

Map<String, Object> map = new HashMap<String, Object>(); 

map.put("int", 20); 
map.put("long", 100L); 
// etc 

注:

// Explicit unboxing 
int x = (int) (Integer) map.get("int"); 
// Implicit unboxing 
int y = (Integer) map.get("int"); 
// USing a method from Number instead 
int z = ((Integer) map.get("int")).intValue(); 
+0

おばあさん、あなたは本当に寝ない。私は同じことをポストしようとしていた。 :) –

+0

数字の別のオプションは、Map

+2

@Peter Lawreyです。OPでは、String型の値も必要です。番号は適格ではありません。 –

0

あなたはすることができますintの代わりにIntegerを使用してください。

3

プリミティブをJavaのMapに配置すると、オートボックスがオブジェクト形式になります。彼らは自動箱入りIntegerになりますよう

Map<Integer, String> myMap = new HashMap<Integer, String>(); 

は、あなたが、タイプintのプリミティブを使用することができます。たとえば、Mapとして定義され、あなたがしている場合。あなたの元の質問については

、などMap定義:あなたは、マップ内の任意のJavaオブジェクトを置くことができるはず

// using Integer for key type, can be something else 
Map<Integer, Object> myMap = new HashMap<Integer, Object>(); 

を。

+1

マップ**は**インタフェースなので、 'new Map ();'は失敗です。 –

+0

@The Elite Gentleman - 申し訳ありませんが、タイプミス –

関連する問題