-2

私はハッシュマップを持っています。オブジェクトには、名前、住所、電子メールなどの情報が含まれています。HashMap を反復処理できますが、オブジェクトから値を取得できません。これが私のコードです。誰かがこれを行う適切な方法を教えてください。

public void getData(){

    // hashmap is records<key, Object>
    // Object contains properties name, address, email

    Iterator it = records.entrySet().iterator();
    while(it.hasNext()){
        Map.Entry entry = (Map.Entry) it.next();

        Object key =  entry.getKey();
        Object val =  entry.getValue();

        // this gets me through hashmap
        // how do I get name, address and email from object?

    }

}
4

3 に答える 3

2

entry.getValue()ジェネリックを使用していないため、名前、アドレス、および電子メールを使用して、オブジェクトのクラスに結果を明示的にキャストする必要があります。

その実際のクラスは提供していませんが、次のようなものかもしれません。

    Person val =  Person.class.cast(entry.getValue());
    name = val.getName();
    // and so on....
于 2013-05-19T06:03:18.470 に答える
1

を呼び出してアイテムを取得することはできません.getValue()。使用しているオブジェクト タイプにオブジェクトを割り当てる必要があります。単純にキャストしないでください。これは、Java のコンパイラによる構文上の制約のみを満たすためです。あなたのオブジェクトが実際にあなたが思っているものであることを確認したい. 例えば:

  Object o = it.next();

  if (o instanceof MyObjType)
  {
        MyObjType obj = (MyObjType) o.
  }
于 2013-05-19T06:07:08.393 に答える
0

あなたの名前、住所、電子メールがPersonalInfo型のオブジェクトにあるとしましょう。次に、イテレータを定義するときに、次のようにジェネリックを使用します-

Iterator<PersonalInfo> it = records.entrySet().iterator();

そのようにマップを定義することもできます。オブジェクト (多態的な参照) が保持する日付またはオブジェクトがわかっているため、オブジェクトを使用する必要はありません。

あなたのマップを次のように定義してください -

Map<key, PersonalInfo> records = new HashMap<key, PersonalInfo>();

PersonalInfo クラス内には、名前、電子メールなどの各変数のゲッターメソッドとセッターメソッドがあります。次のようにデータを抽出できます。

PersonalInfo myInfo =  entry.getValue();
String name = myInfo.getName();
String email = myInfo.getEmail();
//etc...
于 2013-05-19T07:08:13.120 に答える