java - 以有用的方式转换 HashMap

标签 java generics casting

考虑到 Java 6,这里第 1 行和第 2 行的转换之间的 [实际] 区别是什么:

if (obj instanceof HashMap) {
    HashMap meta = (HashMap) obj; // line 1, raw-type warnings
    // vs
    HashMap<?, ?> meta = (HashMap<?, ?>) obj; // line 2, no warnings
    // ..
}

为什么有人会选择第 2 行(没有警告,类型安全),但似乎不能以有意义的方式使用转换的映射(即 put()/get()) ?

最佳答案

HashMap = HashMap<Object, Object> != HashMap<?, ?>

HashMap<?, ?> m1 = new HashMap<Object, Object>();
m1.put("foo", "bar");    // ERROR!!

HashMap<Object, Object> m2 = new HashMap<Object, Object>();
m2.put("foo", "bar");    // OK

HashMap m3 = new HashMap<Object, Object>();
m3.put("foo", "bar");   // WARNING (should be parameterized)

如果你打算只使用 HashMap.get()不会有“实际”差异。

关于java - 以有用的方式转换 HashMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20394902/

相关文章:

java - 为什么 Java 需要显式向下转型?

Java 名称冲突错误,尽管方法签名不同

Java 泛型 : capture generic type when copying instances of subclasses

java - 在 Java 中将 int(primitive) 转换为 Long(wrapper) 的最佳方法

python - 由列表构造函数转换为 int 的字节

generics - 如何在嵌套 Rust 类型中抽象泛型?

java - 过滤大字符串

java - 不满意链接错误 : The specified procedure could not be found

java - 在 DIV HTML 中遍历或查找元素的最快方法

java - EJB 模块和 HTTP 路由器模块之间的通用绑定(bind)