クラスのフィールドに動的にアクセスするには、リフレクションやApache BeanUtilsクラス(Java BeanをMap for YOUに変換できる)を使用するのが慣習的です。 )はマップ内のオブジェクトを単純にエンコードします。
あなたが本当に尋ねているような音です。どのようにして、動的にエンコードされたデータを一般的に処理できますか?これはjavaの一般的な作業です。通常、変数に正確な型のデータをエンコードしないので、イントロスペクションが必要です。イントロスペクションを使用することで、コードベースを非常に簡単に一般化することができます。
あなたがマップに
を単純な名前/値のタプルとして設定ラージオブジェクトをエンコードしたい場合は、各マップにはいくつかのフィールドを持つオブジェクトをエンコードし、大きな「マップのリスト」を作成するのソリューションは、さ効果的です。多くの場合、データモデルを作成する前に、データモデルのプロトタイプ作成や、XMLまたはJSONオブジェクトでいっぱいのファイルの最初の解析を行うために行われます。いずれにせよ、あなたはむしろ正しいタイプとしてオブジェクトを格納ていることを確認し、その種類ごとにオブジェクト「名前」にする必要はありません、そして、あなたは簡単代わりに型推論を使用することができます。
List<HashMap<String,Object>> my objects = new ArrayList<HashMap<String,Object>>();
HashMap<String,Object> h = new HashMap<String,Object)();
h.put("SSN",new Integer(2224441234));
h.put("username","jayunit100");
myObjects.add(h);
//Now, you can easily identify String vs integer values using introspection :
HashMap<String,Object> h = myObjects.get(0);
//You will need to iterate through the entries of the map as follows,
//And use intropection to process each type as you see fit.
for(Entry e : h.entries)
{
Object o = e.getValue();
if(o instanceof Integer)
System.out.println(e.getName() + " was an int! that was easy !");
else
System.out.println(e.getName() + " was another (non int) type : " + o.getClass().getName());
}
をこのように、任意のプロパティを持つオブジェクトの大規模なコレクションを簡単に作成することができます。これらのプロパティのタイプは、マップ内のどのような方法でもエンコードする必要はありません。次に、javaのイントロスペクションを使用して、実行時に型が何であるかを調べることができます。
あなたが動的にフィールドにアクセスしたい場合は、特定の変数名とフィールドタイプ
にコーディングする必要がないように例えば、データベースクエリの構築やラージオブジェクトcolletionsをデバッグこれは、一般的です。これらのタスクは、フィールド/値を単純な書式付きテキストで名前の値のペアとしてリストする必要があることがよくあります。これを行うには、型をマップとしてではなくオブジェクトとして格納し、Apache BeanUtilsライブラリを使用してそれらのオブジェクトをマップに変換するか、BeanUtils.describeのエントリを繰り返してすべてのフィールドに対して操作を動的に行うことをお勧めします( myObject)メソッドを使用します。あなたが大規模な操作の種類に非常に高速なアクセス
をしたい場合は
あなたは、大規模な配列に格納することができますし、データをエンコード/最適化します。あなたが非常に計算集約的なI/Oまたは計算を実際に行っていない限り、これは悪い考えです。
最終ノート:内容を分析/印刷/出力するときに、キー/値のペアが同じ順序で出現するように、ハッシュマップの代わりにTreeMapsを使用することができます。
あなたの投稿を編集してください。私の意見では、あなたがしようとしていることは明らかではありません。特に使用されているデータの種類と、これをやっている理由。 – fuzzy
ファジー、ハッシュマップは、すべての列が独自の型を持つ表の行の構造を表します。私は列の型として値を格納したい – simpleuser
私が言ったように、あなたの投稿を編集してください。それはまだ(文法的に)正しくはなく、書式も改善される可能性があります。いくつかの追加情報を追加したり、状況を異なる方法で記述してみてください。 – fuzzy