我正在开发一个Java EE项目,我需要一个结构来将key-List<value>
保存在RAM中。我创建了一个类似于这样的类:
public class ListMap<K, V> {
private Map<K, List<V>> map;
private Class<? extends List<V>> listClass;
public ListMap(Class<? extends Map<K, List<V>>> mapClass, Class<? extends List<V>> listClass) throws InstantiationException, IllegalAccessException {
this.map = mapClass.newInstance();
this.listClass = listClass;
}
public void add(K key, V val) throws InstantiationException, IllegalAccessException {
if (map.containsKey(key))
map.get(key).add(val);
else {
List<V> valList = listClass.newInstance();
valList.add(val);
map.put(key, valList);
}
}
public Map<K, List<V>> getMap() {
return map;
}
public <T extends Map<K, List<V>>> T getMap(Class<T> cls) {
return cls.cast(map);
}
public void setMap(Map<K, List<V>> map) {
this.map = map;
}
}
我尝试这样做:
ListMap<String, String> msgs = new ListMap<>(HashMap.class, ArrayList.class);
但是,它不起作用。任何人都可以告诉我如何实例化这个类?
答案 0 :(得分:0)
我认为其中一个问题是您不能将泛型放在类声明中,例如HashMap<String, String>.class
这对你有用吗?
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class ListMap<K, V> {
private Map<K, List<V>> map;
private Class<? extends List<V>> listClass;
@SuppressWarnings("unchecked")
public ListMap(Map<K, List<V>> map, List<V> listType) {
this.map = map;
this.listClass = (Class<? extends List<V>>) listType.getClass();
}
public void add(K key, V val) throws InstantiationException, IllegalAccessException {
if (map.containsKey(key))
map.get(key).add(val);
else {
List<V> valList = listClass.newInstance();
valList.add(val);
map.put(key, valList);
}
}
public Map<K, List<V>> getMap() {
return map;
}
public <T extends Map<K, List<V>>> T getMap(Class<T> cls) {
return cls.cast(map);
}
public void setMap(Map<K, List<V>> map) {
this.map = map;
}
public static void main(String[] args) throws InstantiationException, IllegalAccessException {
new ListMap<>(new HashMap<Integer, List<String>>(), new ArrayList<String>());
}
}