2016-03-08 57 views
0

对于我所做的课程,我优先于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 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符号),这是我认为确定的,但我宁愿没有警告就开始。

回答

0

如果你不想警告,唯一的解决办法将是

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

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

+0

这是我落得这样做: '公共布尔等于(对象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

+0

我无法将它格式化得很好 – Tony

+0

你可以这样做,但不可能有任何意义。什么是'equalsMap'的主体,你确定它不能在任意的'Map'上正常工作? –

相关问题