2013-05-19 3 views
-2

나는 HashMap을 가지고있다. 객체에는 이름, 주소, 전자 메일과 같은 정보가 들어 있습니다. HashMap을 반복 할 수 있지만 Object에서 값을 가져올 수 없습니다. 아무도 내게 이것을 할 수있는 적절한 방법을 보여줄 수 있다면 내 코드는 여기있다.Java의 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? 

    } 

} 
+1

현대 코드에서는 제네릭없이 'HashMap'을 사용하면 안됩니다. –

답변

2

당신이 제네릭을 사용하지 않기 때문에, 명시 적으로 이름, 주소, 이메일과 객체의 클래스에 entry.getValue()의 결과를 캐스팅해야합니다.

당신은 그 실제 클래스를 제공하지 않았다,하지만 뭔가처럼 수 있습니다 당신은 단순히 .getValue()를 호출하여 아이템을 얻을 수

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

제네릭을 사용하지 않는다면 2013 년에 잘못하고 있다고 주장 할 수 있습니다. –

+1

'Person val = (Person) entry.getValue();'를 사용하지 않는 이유는 무엇입니까? – johnchen902

+0

@ johnchen902 왜냐하면 객체가 클래스의 인스턴스가 아니라면'Class.cast()'는'ClassCastException'을 던질 것이기 때문입니다. –

1

. 사용중인 개체 유형에 개체를 지정해야합니다. 자바의 컴파일러에 의한 구문 제약 조건을 만족시키기 때문에 단순히 캐스팅하면 안됩니다. 당신은 당신의 물건이 당신이 생각하는 것임을 확실히하고 싶습니다. 예를 들어 :

Object o = it.next(); 

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

'it.next()'를 두 번 호출했고 두 개의 호출이 다른 값을 반환합니다. – johnchen902

+0

나는 보았고 바뀌었다. 제발 downvote. 감사. –

+0

정확히 아무것도 변경하지 않았습니다. – johnchen902

0

은 당신의 이름, 주소, 이메일 유형 PersonalInfo의 객체라고 할 수 있습니다. 당신이 제네릭을 다음과 같이 반복자의 사용을 정의 할 때 다음 -

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

당신은 또한 당신의지도 방법을 정의 할 수 있습니다. Object (Polymorphic reference)가 보유 할 날짜 또는 객체를 아는대로 Object를 사용할 필요가 없습니다.

정의처럼 당신의지도 - 당신이 게터세터 이름처럼 각 변수에 대한 방법이됩니다 PersonalInfo 클래스 내부

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

, 다음과 같이 데이터를 추출 할 수 etc.Now 이메일 -

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