Hashtable
のキーString
と の値を持つがありますString
が、プロジェクトで、複数の異なるデータ型を格納できる必要があるポイントに達しました。たとえばint
、String
、Date
、 などをすべて 1 つに格納する必要がありHashtable
ます。
5 に答える
HashTable
または、およびその他のプリミティブ型Map
を除いて、任意のコレクションでこれを処理できます。int
プリミティブ型は保存できず、Object
参照のみを保存できます。int
オブジェクトとしてラップする必要がありInteger
ます。
Map<String, Object> map = new HashMap<String, Object>()
これにより、String 型のキーと Object 型の値を持つマップが得られます。これは基本的に Object 型の子孫 (Date、Integer、String など) を意味します。他の回答は、int、boolean などのプリミティブを使用する代わりに、対応する Integer、Boolean などを使用する必要があるという事実を正しく指摘しています。
get
このようなマップでの操作の戻り値の型は ですObject
。したがって、型情報を正しく処理するのは開発者の責任です。
Hashtable と HashMap の違いは何かという質問に対する適切な回答がここに提供されています。
これは可能ですが、一般的には良い考えではありません。多くの場合、これは型キャストの例外と問題につながります。
HashTable は、特定のクラス型ではなく汎用オブジェクトを格納するように設定できますが、それらを取得する際の型変換は自動的には行われません。
オブジェクトをコレクションから戻すには、何らかの形式の型チェック ルーチンを開発する必要があります。
保存するクラス タイプごとに個別のコレクションを作成することをお勧めします。
PS: HashTable の代わりに HashMap を使用することもお勧めします。HashTable は廃止されました。
一般的なデータ型Object
を格納することはできますが、プリミティブ データ型は許可されません。
HashTable を に変更し、Hashtable<String, Object>
格納するint
場合は、最初にキャストする (または自動キャストを使用する) 必要がありますInteger
。テーブルから値を取得した後if(value instanceof String)
、任意のタイプなどでタイプを決定できます。