消除 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
类型做正确的事情。
我正在覆盖 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 formMap<?,?>
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
类型做正确的事情。