5

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

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

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

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

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

预先感谢!马库斯

4

2 回答 2

3

这应该让编译器满意:

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

ObjectString是和中最具体的超类型Integer。您的代码也有改进的空间。首先依赖Map接口,而不是具体HashMap实现。其次,如果您真的不需要该Comparable功能,只需使用Map<String, Object>. 最后但并非最不重要的一点是,避免多类型集合并更喜欢强类型。

[...]data 包含字符串和 ints[...] ” - 如果它只是从Stringto的映射Integer

public synchronized void update(HashMap<String, Integer> data)
于 2012-08-19T07:23:13.293 回答
1

首先,你不应该坚持HashMap在你的签名。为什么不只是一个Map?其次,您应该允许 map 值类型是任何实现 Comparable. 第三,Comparable可以使用无界通配符对自身进行参数化:

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

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

于 2012-08-19T12:27:27.210 回答