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)、任意のタイプなどでタイプを決定できます。