我有以下全局变量:
private Map<String,List<String>> network;
我在我的构造函数中实例化它:
network = new Hashtable<String,ArrayList<String>>();
上面的实例化没有编译。显然,当我对Map进行参数化时,我必须声明它是一个专门从String到ArrayList的映射,而不是使用更通用的List?关于为什么我必须这样做的任何见解?
答案 0 :(得分:5)
抱歉,您无法继承内部类:
network = new Hashtable<String,List<String>>();
但是当你添加一个成员时,你可以创建一个arraylist值。
network.put("Key", new ArrayList<String>());
答案 1 :(得分:3)
反过来说:当您创建新的HashTable时,不必须指定您将使用ArrayLists作为值。相反,你应该说
new Hashtable<String, List<String>>();
并且您将要用作值的List实现的选择仍然是免费的。
答案 2 :(得分:1)
您还可以将变量参数化为
private Map<String, ? extends List<String>> network;
参见例如http://en.wikipedia.org/wiki/Covariance_and_contravariance_%28computer_science%29#Java了解更多详情。