如何从java中的hashmap中的内部对象获取值?

时间:2013-05-19 06:01:03

标签: java hashmap

我有一个HashMap。对象包含姓名,地址,电子邮件等信息。我能够迭代HashMap但不能从Object获取值。这是我的代码,如果有人可以请告诉我一个正确的方法来做到这一点。

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?

    }

}

3 个答案:

答案 0 :(得分:2)

由于您没有使用泛型,因此需要使用名称,地址和电子邮件将entry.getValue()的结果显式地转换为对象的类。

你没有提供实际的课程,但它可能是这样的:

    Person val =  Person.class.cast(entry.getValue());
    name = val.getName();
    // and so on....

答案 1 :(得分:1)

您无法通过致电.getValue()来获取该项目。您需要将对象分配给您正在使用的任何对象类型。你不应该简单地转换,因为这只会满足java编译器的语法约束。你想确保你的对象确实是你想象的那样。例如:

  Object o = it.next();

  if (o instanceof MyObjType)
  {
        MyObjType obj = (MyObjType) o.
  }

答案 2 :(得分:0)

假设您的姓名,地址,电子邮件位于 PersonalInfo 类型的对象中。然后,当您定义迭代器时,使用泛型,如下所示 -

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

您也可以通过这种方式定义地图。不需要使用Object,因为您知道Object(Polymorphic reference)将保存的日期或对象。

将地图定义为 -

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

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

PersonalInfo myInfo =  entry.getValue();
String name = myInfo.getName();
String email = myInfo.getEmail();
//etc...