Tôi đang tìm cách tạo HashMap ánh xạ tới các loại hỗn hợp.Lập bản đồ Java Các loại hỗn hợp
Ví dụ, sau đây sẽ làm việc trong Python (lưu ý rằng một Python dict
là tương tự như một Java HashMap
):
d = dict()
d["str"] = "This is a string"
d["flt"] = 1.23
d["int"] = 5
và khi truy cập vào d[x]
, loại thích hợp sẽ được trả lại (string, float, int trong ví dụ này).
Trong Java, tôi có thể đi với một HashMap<String, Object>
, nhưng tôi không thực sự có một cách để ngay lập tức cho biết loại đối tượng là gì. Vì vậy, thay vào đó, tôi hiện đang cố gắng làm là tạo ra một lớp học MixedType
chứa một đối tượng, nhưng cũng có thông tin kiểu gốc của nó, để tôi có thể downcast nó sau này. Ví dụ:
public class MixedMap
public static class MixedType
{
public Class<?> cls;
public Object val;
public MixedType(Class<?> c, Object v)
{
this.cls = c;
this.val = v;
}
}
public static void main(String args[])
{
MixedType m1 = new MixedType(String.class, "This is a String");
System.out.println((m1.cls)m1.val);
}
}
Lưu ý rằng đây là những gì tôi đang cố gắng làm :-) như nó hiện chưa được biên dịch phàn nàn rằng m1 cannot be resolved to a type
.
Vì vậy, câu hỏi của tôi là, làm thế nào tôi có thể sửa lỗi này? Các cách khác để đạt được cùng một mục tiêu sẽ được hoan nghênh, nhưng xin đừng trả lời cho tôi biết rằng điều này hạn chế khả năng kiểm tra kiểu của trình biên dịch - tôi biết điều đó và OK với nó.
Xin cảm ơn trước.
Tôi có thể hỏi: bạn sẽ làm gì với các đối tượng khi đã truy xuất? Tôi cảm thấy như thường có một cách tốt hơn để thiết kế này để tránh phải đúc ở tất cả. –
Thậm chí nếu bạn có thông tin kiểu được lưu trữ trong các đối tượng 'đồng bằng' của mình, làm thế nào bạn có thể biết phải làm gì sau khi bạn truyền chúng? –
Chắc chắn, tôi sẽ sử dụng HashMap làm đối tượng kiểu "cấu hình", trong đó người dùng sẽ chỉ định một số cài đặt cấu hình nhất định sẽ được phân tích cú pháp và đưa vào bản đồ này. Tại một số điểm nhất định trong chương trình, tôi sẽ kiểm tra xem có một tùy chọn cấu hình nào đó được thiết lập hay không, nếu sử dụng nó và nếu không sử dụng mặc định. Lý do cho nhu cầu về các loại hỗn hợp là một số tùy chọn cấu hình sẽ là chuỗi, một số tùy chọn khác sẽ xuất hiện, những thứ khác, v.v. – jedwards