Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 8:如何传递映射<;K、 V>;和列表<;K、 V>;作为参数的子类型_Java - Fatal编程技术网

Java 8:如何传递映射<;K、 V>;和列表<;K、 V>;作为参数的子类型

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

我正在从事一个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<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
。为什么要使用反射?一个
供应商除非你只是为了好玩而实现它,请看一看。