我正在推翻equals()
我所做的课程。我期待的一种类型是
Map<String,String>
我做了以下事情。
public boolean equals(Object o) {
if (o instanceof Map<String, String>) {
return equalsMap((Map<String, String>) o);
}
并收到此错误:
无法对参数化类型
Map<String,String>
执行instanceof检查。请改用Map<?,?>
形式,因为在运行时将删除其他通用类型信息
所以我将其更改为以下内容:
@Override
public boolean equals(Object o) {
if (o instanceof Map<?, ?>) {
return equalsMap((Map<String, String>) o);
}
(第一个也有@Override
,但我忘记复制它,现在它不会让我这么做。
当我完成上述操作时,它会编译但现在我收到此警告但没有任何建议:
类型安全:取消选中从对象投射到
Map<String,String>
我可以理解它可能是Map<?,?>
中的任何内容,但我在上面尝试使其更具体,它给了我错误并告诉我使用所以我不知道该怎么做。所有它建议使用SuppressWarnings 'unchecked'
(我不能在这里输入at符号而不会出现错误),我猜这是好的,但我宁愿没有警告开始。
答案 0 :(得分:0)
如果您不想要警告,唯一的解决方案就是
if (o instanceof Map<?, ?>) {
return equalsMap((Map<?, ?>) o);
}
并使equalsMap
方法为任意Map
类型做正确的事。