我有一个存储在Map中的键值对:Map<String, Object>
。这些值从文件中获取并属于不同的基元,因此在Map中存储为Object类型。
假设Map包含三个键值对:
{
"objA": 1,
"objB": "MyName",
"obj3": "19-09-2015"
}
必须将ObjA检索为Integer,必须将objB检索为String,并且必须将obj3检索为LocalDate。
我希望有一个方法可以将Map,KeyName和Desired Class作为参数传递,它应该使用Desired Class作为类型返回获取的值:
这样的事情:
public T fetch(Map<String, Object> myMap, String key, Class T) {
// Find value corresponding to 'key'
Object object = myMap.get(key);
// Return the object as type T
return (T)object;
}
然后我将此方法称为:
Double myJavaValue = fetch(myMap, myValue, java.lang.double.class);
我究竟能做到这一点?
答案 0 :(得分:4)
@SuppressWarnings("unchecked")
public static <T> T fetch(Map<String, Object> myMap, String key) {
return (T) myMap.get(key);
}
答案 1 :(得分:3)
完整的方法是:
public <T> T fetch(Map<String, Object> myMap, String key, Class<T> clazz) {
// Find value corresponding to 'key'
Object object = myMap.get(key);
return clazz.cast(object);
}
答案 2 :(得分:1)
public static <T> T func(MapM<String, T> myMap, String key, Class<T> cls) {
return cls.cast(myMap.get(key));
}
答案 3 :(得分:1)
private void start() {
Map<String, Object> dataMap = new HashMap<String, Object>();
dataMap.put("objA", 1);
dataMap.put("objB", "MyName");
dataMap.put("objC", LocalDate.of(2015, 9, 19));
this.fetch(dataMap, "objA", Integer.class);
this.fetch(dataMap, "objB", String.class);
this.fetch(dataMap, "objC", LocalDate.class);
}
private <T> T fetch(Map<String, Object> myMap, String key, Class<T> dataType) {
return dataType.cast(myMap.get(key));
}
答案 4 :(得分:0)
您可以使用强制转换方法。
return T.cast(myValue);
答案 5 :(得分:-1)
实际上,您的代码似乎几乎是正确的!你只是不知道泛型方法的语法。只需在<T>
后添加public
,然后删除Class
参数:
public <T> T fetch(Map<String, Object> myMap, String key) {
// Find value corresponding to 'key'
T object = (T)myMap.get(key);
// Return the object
return object;
}