如何正确实例化HashMap
,其值为List<Number>
的变体 - 即,值可采用List<Long>
和/或List<Double>
的形式。这是我到目前为止所尝试的内容:
HashMap<String, List<Number>> foo = new HashMap<String, List<Number>>();
foo.put("Tenticles", new ArrayList<Long>());
错误消息:The method put(String, List<Number>) ... is not applicable for the arguments (String, List<Long>)
。
我还希望能够将Long
添加到成分List<Long>
,同样可以添加Double
。
编辑 这些答案未显示如何将Long
或Double
添加到其中一个成分列表中。
答案 0 :(得分:3)
您可以使用wildcards
e.g。
Map<String, List<? extends Number>> foo = new HashMap<String, List<? extends Number>>();
如果您使用的是Java 7,则可以执行以下操作以避免重复操作
Map<String, List<? extends Number>> foo = new HashMap<>();
将项目添加到列表
List<Long> longs= new ArrayList<>();
longs.add(10L);
foo.put("numbers", longs);
答案 1 :(得分:2)
使用通配符
HashMap<String, List<? extends Number>> foo = new HashMap<String, List<? extends Number>>();
LinkedList<Long> list = new LinkedList<>();
list.add(10L);
foo.put("Tenticles", list);
您的List
对象现在必须是Number
的子类型。
答案 2 :(得分:0)
以下是您需要做的事情: -
final HashMap<String, List<? extends Number>> foo = new HashMap<>();
foo.put( "Tenticles", new ArrayList<Long>() );
语法List<? extends Number>
表示每个对象实现Number
的对象列表。