Java:参数化Map对象

时间:2011-01-29 21:32:08

标签: java polymorphism parameterized

我有以下全局变量:

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

我在我的构造函数中实例化它:

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

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

3 个答案:

答案 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了解更多详情。