我有以下全局变量:
private Map<String,List<String>> network;
我在我的构造函数中实例化它,如下所示:
network = new Hashtable<String,ArrayList<String>>();
上面的实例化不编译。显然,当我对 Map 进行参数化时,我必须声明它是专门从 String 到 ArrayList 的映射,而不是使用更通用的 List?关于为什么我必须这样做的任何见解?
我有以下全局变量:
private Map<String,List<String>> network;
我在我的构造函数中实例化它,如下所示:
network = new Hashtable<String,ArrayList<String>>();
上面的实例化不编译。显然,当我对 Map 进行参数化时,我必须声明它是专门从 String 到 ArrayList 的映射,而不是使用更通用的 List?关于为什么我必须这样做的任何见解?
抱歉,您不能子类化内部类:
network = new Hashtable<String,List<String>>();
但是当您添加成员时,您可以将值创建为数组列表。
network.put("Key", new ArrayList<String>());
恰恰相反:当您创建新的 HashTable 时,您不必指定将使用 ArrayLists 作为值。相反,你应该说
new Hashtable<String, List<String>>();
并且您将用作值的 List 实现的选择仍然是免费的。
您还可以将变量参数化为
私人地图<String, ? 扩展 List<String>> 网络;
有关更多详细信息,请参见例如http://en.wikipedia.org/wiki/Covariance_and_contravariance_%28computer_science%29#Java。