Tôi cần chuyển đổi số Map
thành Map<string,string>
và tôi nghĩ rằng trước tiên tôi phải chuyển đổi bản đồ thô thành Map<Object,Object>
rồi chuyển đổi lại thành Map<String,String>
.Đúc Bản đồ thô thành Bản đồ <Object, Object>, sẽ có vấn đề gì không?
đoạn mã giống như dưới đây.
Map obj1 = new HashMap();
obj1.put("key1", 1);
obj1.put("key2", false);
obj1.put("key3", 3.94f);
Map<Object, Object> obj2 = obj1;
Map<String, String> obj = new HashMap<String,String>();
for (Map.Entry<Object, Object> entry: obj2.entrySet()) {
obj.put(entry.getKey().toString(), entry.getValue().toString());
}
Tôi đoán nó sẽ làm việc trong mọi điều kiện nhưng tôi muốn nghe từ người khác về khả năng nguy hiểm của mã này. (Bất kỳ possiblities cho ClassCastException
chẳng hạn?)
Hãy cũng cho tôi biết nếu bạn có một ý tưởng tốt hơn.
- Mã sửa đổi
Map obj1 = new HashMap();
obj1.put(2, 1);
obj1.put(true, false);
obj1.put(4.4f, 3.94f);
Map<String, String> obj = new HashMap<String,String>();
for (Object k : obj1.keySet()){
obj.put(k.toString(), obj1.get(k).toString());
}
Kể từ mục Map liệu sẽ chứa chìa khóa/giá trị của đối tượng dù sao, tôi nghĩ mình không cần phải tạm thời Map<Object,Object>
. Chỉ cần lặp qua từng mục hoạt động tốt và tôi không thấy bất kỳ vấn đề nào cho đến nay.
Bạn đang chuyển các loại 'Chuỗi' rõ ràng cho cả khóa và giá trị. Tôi không thấy một vấn đề với điều này. –
Bạn không cần 'obj2'. Bạn có thể viết 'for (Map.Entry entry: obj1.entrySet())'. Nhưng cách tốt nhất là sử dụng các ký tự đại diện - những gì bạn có là 'Bản đồ ,?> '. –