Java 8:如何传递映射<;K、 V>;和列表<;K、 V>;作为参数的子类型
我正在从事一个JavaEE项目,在这个项目中,我需要一个结构来将Java 8:如何传递映射<;K、 V>;和列表<;K、 V>;作为参数的子类型,java,Java,我正在从事一个JavaEE项目,在这个项目中,我需要一个结构来将键列表保存在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
键列表
保存在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);
公共类列表映射{
私人地图;
私有类我认为其中一个问题是不能在类声明中添加泛型,例如HashMap.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>());
}
}
import java.util.ArrayList;
导入java.util.HashMap;
导入java.util.List;
导入java.util.Map;
公共类列表映射{
私人地图;
私有类你在使用Java 8吗?另外,定义“不工作”-发布完整的编译错误或stacktrace。你不需要传递mapClass
:只需传递一个已经构建的Map
。然后传递一个Supplier
。为什么要使用反射?一个供应商除非你只是为了好玩而实现它,请看一看。