我在“Map.Entry entry =(Entry)o;”
上有一个“从Object到Map.Entry的未经检查的强制转换”我认为一切正常,我可以安全地添加抑制警告,但我不确定。这是我的代码。
public abstract class WebPath {
protected Hashtable<String, String> wp;
public String get(String whatDoYouWant) {
for (Object o : wp.entrySet()) {
Map.Entry<String, String> entry = (Entry<String, String>) o;
if (whatDoYouWant.equals(entry.getKey())) {
return (String) entry.getValue();
}
}
return null;
}
}
谢谢大家,祝你有个美好的一天!
答案 0 :(得分:6)
不要压制警告,它会给你很好的建议!您选择将每个条目分配给无信息的基类Object
,而不是更精确的类型Map.Entry<String, String>
。如果您修复了for-loop,您将消除警告:
for(Map.Entry<String, String> o : wp.entrySet()) {
答案 1 :(得分:4)
当您获取实例并将其强制转换为派生类时,编译器不喜欢它。这是因为您无法保证该实例 该派生类。如果你知道更好,例如在你的情况下,那很好,但这不是一般的最佳做法。
你的wp.entrySet()返回一组Map.Entry。所以使用Map.Entry!更好的是,如果你没有删除泛型类型,那么你应该:
for(Map.Entry<String, String> entry : wp.entrySet()) {
// ...
}
无需投射,因为你知道它是什么类型。