我有一个函数,声明如下:
public synchronized void update(HashMap<String, Comparable> data)
数据包含字符串和整数,但Comparable会发出警告
Comparable is a raw type. References to generic type Comparable<T> should be
parameterized
由于我没有过多地发现警告,问题是,是否有正确的方法,我不想压制警告。
提前感谢! 马库斯
答案 0 :(得分:3)
这应该让编译器满意:
public synchronized void update(HashMap<String, Comparable<Object>> data)
Object
是String
和Integer
中最具体的超类型。您的代码还有改进的空间。首先依赖于Map
接口,而不是具体的HashMap
实现。其次,如果您真的不需要Comparable
功能,请使用Map<String, Object>
。最后但同样重要的是,避免使用多类型集合,并且更喜欢强类型。
“ [...]数据包含字符串和整数[...] ” - 如果它只是从String
到Integer
的地图:
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<?>>
中的任何一个进行调用。