问题描述
我希望有一个函数(例如)在两种情况下都输出Map的所有值:
Map<String, String> map1 = new HashMap<String, String>();
Map<String, Integer> map2 = new HashMap<String, Integer>();
output(map1, "1234");
output(map2, "4321");
以下似乎不起作用:
public void output(Map<String, Object> map, String key) {
System.out.println(map.get(key).toString());
}
不是Object
类型的String
和Integer
吗?
1楼
Map<String, String>
不扩展Map<String, Object>
,就像List<String>
不扩展List<Object>
。
您可以将值类型设置为?
通配符:
public void output(Map<String, ?> map, String key) { // map where the value is of any type
// we can call toString because value is definitely an Object
System.out.println(map.get(key).toString());
}
2楼
你正在寻找的是在Java中尝试在Collections
上引入多态,并称之为 。
更具体的用例, 符合要求。
@manouti在他的回答中使用了无界通配符 (请参阅通配符链接中的详细信息),但您可以使用更具体的内容: 上限有界通配符 。
例如Map<String, ? extends Object>
Map<String, ? extends Object>
其中Object
通常是最具体但仍然是通用的类,必须从中派生所有使用的类。
例如,如果所有地图中的值都有一个共同的父(或“超级”)类YourParentClass
,那么您可以在我的示例中用该类名替换Object
。