2011-07-07 44 views
5

Tôi có một hashmapHashMap trong vòng một HashMap

Map<String, Object> grpFields = new HashMap<String, Object>(); 

mà được chứa trong hashmap khác:

Map<Integer, Object> targetFields = new LinkedHashMap<Integer, Object>(); 

tôi có thể nhìn thấy nó trong chế độ gỡ lỗi:

20005=0, 453={452-2=7, 452-0=1, 452-1=17, 448-2=81, 448-1=0A, 447-2=D, 447-1=D, 447-0=D, 448-0=0A}, 11=1116744Pq2Q, 

nơi 453 là Hashmap, tuy nhiên khi cố gắng trích xuất hashmap từ hashmap gốc bằng cách sử dụng:

HashMap <String, Object> grpMap453 = (HashMap)targetFields.get(453); 

Tôi ném:

java.lang.ClassCastException: java.util.HashMap cannot be cast to java.lang.String 

Chắc chắn cuộc gọi targetFields.get(453); đơn giản nên trả lại một hashmap?

+4

Dòng bạn hiển thị không khớp với thông báo lỗi. – Thilo

+1

Rất tiếc, tôi đã bị lỗi - Tôi không thấy cách bạn gặp phải lỗi đó trên dòng đó. Dấu vết ngăn xếp có hiển thị sự cố bắt nguồn từ dòng đó hay ở đâu đó trong get() không? Bạn có thể tạm thời thử lấy 453 làm Object và xem nó là cái gì! –

Trả lời

10

Tôi đã thử tạo bản trình diễn trên cơ sở những gì bạn đã mô tả và không tìm thấy lỗi nào trong đó.

HashMap<String, Object> hashMap = new HashMap<String, Object>(); 
    hashMap.put("123", "xyz"); 
    HashMap<Integer, Object> map = new HashMap<Integer, Object>(); 
    map.put(453, hashMap); 
    HashMap<String, Object> newMap = (HashMap<String, Object>) map.get(453); 

    System.out.println("Main map "+ hashMap); 
    System.out.println("Map inside map "+map); 
    System.out.println("Extracted map "+newMap); 

nó mang lại cho cảnh báo tại dòng HashMap<String, Object> newMap = (HashMap<String, Object>) map.get(453); đó là "Loại an toàn: không đánh dấu đúc từ Object để HashMap" nhưng không có lỗi gì cả.

Bạn có đang làm tương tự không?

-1

Thay vì:

HashMap <String, Object> grpMap453 = (HashMap)targetFields.get(453); 

Hãy thử

HashMap <String, Object> grpMap453 = (HashMap<String,Object>)targetFields.get(453); 
+3

Xin lỗi, tôi không thể thấy sự khác biệt giữa hai dòng mã. – javanna

+1

@javanna: có thể bây giờ bạn có thể thấy sự khác biệt. –

+0

Bạn cần kiểm tra mắt, có một sự khác biệt rất khác biệt. Một trong những bạn chỉ đơn giản là đúc kết quả của bạn vào một Hashmap, khác rõ ràng phôi nó vào một hashmap . – user756212

0

Như đã lưu ý bạn không thể nhận được rằng lỗi từ dòng mã mà bạn trích xuất các HashMap. Tuy nhiên, bạn sẽ nhận được lỗi đó với dòng mã sau đây:

String s11 = (String)targetFields.get(453);