-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();

您也可以通过这种方式定义您的地图。无需使用 Object,因为您知道 Object(多态引用)将持有的日期或对象。

一定要定义你的地图 -

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

在您的 PersonalInfo 类中,您将为每个变量(如名称、电子邮件等)提供gettersetter方法。现在您可以按如下方式提取数据 -

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