我有一个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?
}
}
答案 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...