我有以下全局变量:的Java:参数化Map对象
private Map<String,List<String>> network;
我实例在我的构造是这样的:
network = new Hashtable<String,ArrayList<String>>();
以上实例不能编译。显然,当我参数化Map时,我必须声明它是一个专门从String到ArrayList的映射,而不是使用更一般的List?任何见解,为什么我必须这样做?
我有以下全局变量:的Java:参数化Map对象
private Map<String,List<String>> network;
我实例在我的构造是这样的:
network = new Hashtable<String,ArrayList<String>>();
以上实例不能编译。显然,当我参数化Map时,我必须声明它是一个专门从String到ArrayList的映射,而不是使用更一般的List?任何见解,为什么我必须这样做?
对不起,你不能继承内部类:
network = new Hashtable<String,List<String>>();
但是当你添加一个成员,你可以创造的价值作为一个ArrayList。
network.put("Key", new ArrayList<String>());
这是相当相反:当您创建新的哈希表,你不必须指定你要使用的ArrayList作为值。相反,你应该说
new Hashtable<String, List<String>>();
和您将用作值的List实现的选择仍然是免费的。
您也可以参数化您的变量为
private Map<String, ? extends List<String>> network;
请参阅http://en.wikipedia.org/wiki/Covariance_and_contravariance_%28computer_science%29#Java了解更多详情。
你应该看看番石榴Multimap。具体来说就是ListMultimap实现。 – rfeak 2011-01-29 21:37:28