消除Java中未经检查的警告

时间:2016-03-08 21:22:39

标签: java dictionary warnings

我正在推翻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符号而不会出现错误),我猜这是好的,但我宁愿没有警告开始。

1 个答案:

答案 0 :(得分:0)

如果您不想要警告,唯一的解决方案就是

if (o instanceof Map<?, ?>) {
    return equalsMap((Map<?, ?>) o);
}

并使equalsMap方法为任意Map类型做正确的事。