如何用不同的类型声明HashMap?

时间:2012-08-19 07:18:11

标签: java types hashmap declaration

我有一个函数,声明如下:

public synchronized void update(HashMap<String, Comparable> data)

数据包含字符串和整数,但Comparable会发出警告

Comparable is a raw type. References to generic type Comparable<T> should be 
 parameterized

由于我没有过多地发现警告,问题是,是否有正确的方法,我不想压制警告。

提前感谢! 马库斯

2 个答案:

答案 0 :(得分:3)

这应该让编译器满意:

public synchronized void update(HashMap<String, Comparable<Object>> data)

ObjectStringInteger中最具体的超类型。您的代码还有改进的空间。首先依赖于Map接口,而不是具体的HashMap实现。其次,如果您真的不需要Comparable功能,请使用Map<String, Object>。最后但同样重要的是,避免使用多类型集合,并且更喜欢强类型。

[...]数据包含字符串和整数[...] ” - 如果它只是从StringInteger的地图:

public synchronized void update(HashMap<String, Integer> data)

答案 1 :(得分:1)

首先,您不应该在签名中坚持HashMap。为什么不只是Map?其次,您应该允许地图值类型为实施 Comparable。第三,Comparable本身可以使用无界通配符进行参数化:

void update(Map<String, ? extends Comparable<?>> data)

现在,您可以使用HashMap<String, Integer>TreeMap<String, String>SortedMap<String, Comparable<?>>中的任何一个进行调用。