3

我有以下全局变量:

private Map<String,List<String>> network;

我在我的构造函数中实例化它,如下所示:

network = new Hashtable<String,ArrayList<String>>();

上面的实例化不编译。显然,当我对 Map 进行参数化时,我必须声明它是专门从 String 到 ArrayList 的映射,而不是使用更通用的 List?关于为什么我必须这样做的任何见解?

4

3 回答 3

5

抱歉,您不能子类化内部类:

network = new Hashtable<String,List<String>>();

但是当您添加成员时,您可以将值创建为数组列表。

network.put("Key", new ArrayList<String>());
于 2011-01-29T21:34:29.637 回答
3

恰恰相反:当您创建新的 HashTable 时,您不必指定将使用 ArrayLists 作为值。相反,你应该说

new Hashtable<String, List<String>>();

并且您将用作值的 List 实现的选择仍然是免费的。

于 2011-01-29T21:36:26.053 回答
1

您还可以将变量参数化为

私人地图<String, ? 扩展 List<String>> 网络;

有关更多详细信息,请参见例如http://en.wikipedia.org/wiki/Covariance_and_contravariance_%28computer_science%29#Java

于 2011-01-29T21:37:44.163 回答