对于我所做的课程,我优先于equals()
。我期待的一种类型是 Map<String,String>
在Java中消除未经检查的警告
我做了以下工作。
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符号),这是我认为确定的,但我宁愿没有警告就开始。
这是我落得这样做: '公共布尔等于(对象o){ \t \t如果(邻的instanceof地图, ?>){ \t \t \t布尔isString = FALSE; \t \t \t地图, ?> map =(地图, ?>)o; \t \t \t为(条目, ?>条目:map.entrySet()){ \t \t \t \t如果((entry.getKey()的instanceof字符串)&& entry.getValue()的instanceof字符串){ \t \t \t \t \t isString = true; \t \t \t \t} \t \t \t \t中断; //落空 \t \t \t} \t \t \t如果(isString){ \t \t \t \t返回equalsMap((地图<字符串,字符串>)O); \t \t \t} \t \t}' 和它属于通过以其他方式调用默认。希望这可以吗? – Tony
我无法将它格式化得很好 – Tony
你可以这样做,但不可能有任何意义。什么是'equalsMap'的主体,你确定它不能在任意的'Map'上正常工作? –