消除 Java 中未经检查的警告

Eliminating an unchecked warning in Java

我正在覆盖 equals() 我制作的 class。我期待的一种类型是 Map<String,String>

我做了以下事情。

public boolean equals(Object o) {
    if (o instanceof Map<String, String>) {
        return equalsMap((Map<String, String>) o);
    }

并收到此错误:

Cannot perform instanceof check against parameterized type Map<String,String>. Use the form Map<?,?> instead since further generic type information will be erased at runtime

所以我将其更改为以下内容:

@Override
public boolean equals(Object o) {
    if (o instanceof Map<?, ?>) {
        return equalsMap((Map<String, String>) o);
    }

(第一个里面也有@Override但是我忘了复制进去,现在不让我复制)。

当我执行上述操作时它编译了但现在我收到此警告但没有任何建议:

Type safety: Unchecked cast from Object to Map<String,String>

我可以理解它可以是 Map<?,?> 中的任何内容,但我在上面尝试使其更具体,但它给了我错误并告诉我要使用,所以我不确定该怎么做。它只建议使用 SuppressWarnings 'unchecked'(我无法在此处键入 at 符号而不会出现错误),我想这是可以的,但我宁愿没有警告开始。

如果您不想收到警告,唯一的解决办法是

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

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